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实例。
我希望线程th.start();
执行后立即执行ThreadTest的run方法,即main方法中的一个。
当我运行程序时,我看到了我的system.out,也没有任何异常。
我也进行了调试,但可以看到循环运行10次。
答案 0 :(得分:2)
您刚开始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
,那么它永远不会通知自己。
答案 1 :(得分:1)
您有未使用的ThreadTest(thread)类数组。
我认为你想要这个:
public static void main(String[] args) {
ThreadTest[] threads = new ThreadTest[10];
int i = 0;
for(int i=0;i<threads.length;i++) {
threads[i] = new ThreadTest();
threads[i].start();
}
}