public class TestSynchronization {
public static void main(String[] args) {
ThreadTest[] threads = new ThreadTest[10];
int i = 0;
for(Thread th : threads) {
th = new Thread(Integer.toString(i++));
th.start();
}
}
class ThreadTest extends Thread {
TestSynchronization ts = new TestSynchronization();
public /*synchronized */void run() {
synchronized(this) {
ts.testingOneThreadEntry(this);
System.out.println(new Date());
System.out.println("Hey! I just came out and it was fun... ");
this.notify();
}
}
}
private synchronized void testingOneThreadEntry(Thread threadInside) {
System.out.println(threadInside.getName() + " is in");
System.out.println("Hey! I am inside and I am enjoying");
try {
threadInside.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
我无法启动ThreadTest实例。
我希望ThreadTest的run方法在行
th.start();
执行后立即执行,这是main方法中的一个。运行程序时,我看不到system.out或任何异常。
我也调试了,但可以看到循环运行了10次。
最佳答案
您只是启动了Thread
,而不是ThreadTest
。 Thread
的run()
方法不执行任何操作。而是创建并start()
一个ThreadTest
。
for(ThreadTest th : threads) {
th = new ThreadTest(Integer.toString(i++));
th.start();
}
您还需要在
ThreadTest
类中使用一个单参构造函数,该构造函数将采用传递给它的String
。public ThreadTest(String msg){
super(msg);
}
您还需要制作
ThreadTest
类static
,以便可以从static
main
方法访问该嵌套类。static class ThreadTest extends Thread {
但是,您将等待所有
Thread
等待。按照编写的方式,此代码将在每个wait
内部调用Thread
,但永远不会到达notify
。必须在notify
上调用Thread
方法,以便从另一个Thread
进行通知。如果正在wait
,则它将永远无法通知自己。