Java 为什么内部类方法无法同步外部类中的对象?
我遇到了一个问题:内部类方法是否无法同步外部类中的对象?stackoverflow的回答告诉我:没有。但我真的想知道原因 例如: 我设计了一个线程池,最多有5个线程来完成工作Java 为什么内部类方法无法同步外部类中的对象?,java,synchronized,Java,Synchronized,我遇到了一个问题:内部类方法是否无法同步外部类中的对象?stackoverflow的回答告诉我:没有。但我真的想知道原因 例如: 我设计了一个线程池,最多有5个线程来完成工作 public class ThreadPool{ // Ignore the Task class private LinkedList<Task> tasks; Executor[] executors = new Executor[5]; private st
public class ThreadPool{
// Ignore the Task class
private LinkedList<Task> tasks;
Executor[] executors = new Executor[5];
private static ThreadPool pool = null;
private ThreadPool() {
tasks = new LinkedList<Task>();
for (int i = 0; i < 5; i++) {
executors[i] = new Executor(i);
}
}
public static ThreadPool getInstance() {
if (pool == null) {
pool = new ThreadPool();
}
return pool;
}
public void addTask(Task task) {
/** igore code here*/
}
private class Executor extends Thread {
private int i;
public Executor(int i) {
this.i = i;
start();
}
public void run() {
Task task = null;
synchronized (tasks) {
if (tasks.size() == 0) {
System.out.println("tasks's size is : " + tasks.size());
try {
while (tasks.size() == 0) {
tasks.wait();
}
} catch (Exception e) {
e.printStackTrace();
}
}
if (tasks.size() > 0)
task = tasks.removeFirst();
}
if (task != null) {
/** ignore code here */
}
}
}
}
它起作用了
所以,我想知道为什么内部类方法不能同步外部类中的对象
希望得到详细的答案。您只有同步的任务。什么代码不起作用?当我调用getInstance时,它的构造函数将被调用。5个线程都会调用run方法!如果同步有效,则只有一个线程可以获得监视器并执行代码。因此,我想知道为什么内部类方法无法同步外部类中的对象。。它可以。当您添加synchronized ThreadPool.this.if仅同步任务时,System.out.printlntasks的大小为:+tasks.size;这一行将执行5次一个线程一次?你可能真的在问,除了你正在写的同步,为什么你不能得到一些免费的额外同步?因为你没有。你得到你写的东西,没有更多。
synchronized (ThreadPool.this) {
...
}