我正在實現一個SimpleInterThreadCommunication的簡單例子,並使用了wait和notify。爲什麼我在使用wait和notify的javaInterThread通信中出現錯誤?
我在線程間總類得到一個錯誤任何人都可以解釋爲什麼
public class InterThread
{
public static void main(String s[])throws InterruptedException
{
Thread b=new Thread();
b.start();
Thread.sleep(10);
synchronized (b)
{
System.out.println("Main thread trying to call wait");
b.wait();
System.out.println("Main thread got notifies");
System.out.println(b.total); //error here total cannot be resolved to a field
}
}
}
class ThreadB extends InterThread
{
int total=0;
public void run()
{
synchronized(this)
{
System.out.println("child thread got notifies");
for(int i=0;i<3;i++)
{
total=total+i;
}
System.out.println("child thread ready to give notification");
this.notify();
}
}
}
這是因爲你的對象b是線程類的,並且總體字段沒有在線程類中隱式定義,而是你已經在ThreadB類中定義了變量b。因此它不能被解析爲一個變量。 – CoderNeji 2015-04-06 13:21:30
因爲'Thread'沒有一個名爲'b'的公共字段。 – 2015-04-06 13:23:02
btw。線程通信可以通過java.util.concurrent中的類以更簡單,更可靠的方式完成。例如LinkedTransferQueue – SpiderPig 2015-04-06 13:47:57