由于我们知道没有规定防止使用 run ()
方法使用 start ()
方法使用一个以上的线条来调用 run ()
方法。 我确实创建了两个对象 m1
和 > m2
, 两者都调用同一个线条来调用。
我要确保第一个对象完成( m1.start
), 在第二个对象执行开始之前拨打线条, 从而完成执行 。
我的问题是为什么我无法在我创建的线索(即 MyThread1
)中使用 syncronized
关键词,加上 run () <()
方法?
我尝试用“ 同步化” 来运行( ) 我创建的线条中的方法, 但是它提供了任意输出( 换句话说, < code> m2 code > 不等待 < code> m1 code > 完成执行 ) 。
你可以在程序底部看到我得到的输出。
public class ExtendedThreadDemo {
public static void main(String[] args) {
Mythread1 m1 =new Mythread1();
Mythread1 m2 =new Mythread1();
m1.start();
m2.start();
System.out.println(" main thread exiting ....");
}
}
MyThread
public class MyThread1 extends Thread {
public synchronized void run() {
for(int i=1; i<5; i++) {
System.out.println(" inside the mythread-1 i = "+ i);
System.out.println(" finish ");
if (i%2 == 0) {
try {
Thread.sleep(1000);
} catch(InterruptedException e) {
System.out.println(" the thread has been interrupted ");
}
}
}
}
}
Output
main thread exiting ....
inside the mythread-1 i = 1
finish
inside the mythread-1 i = 2
finish
inside the mythread-1 i = 1
finish
inside the mythread-1 i = 2
finish
inside the mythread-1 i = 3
finish
inside the mythread-1 i = 4
finish
inside the mythread-1 i = 3
finish
inside the mythread-1 i = 4
finish
从 i=2
之后可以看到,第二个对象(即 m2.start()
)开始执行。