正如我们所知,没有任何规定可以防止多个线程run()
使用方法调用该start()
方法。我确实创建了两个对象m1
,并且m2
都调用同一个线程来运行。
m1.start
我需要通过在第二个对象执行开始之前调用线程来确保第一个对象完成( )它的执行。
我的问题是为什么我不能在我创建的线程中使用synchronized
关键字 with方法(即)?run()
MyThread1
我尝试在我创建的线程中使用“同步”来运行()方法,但它给出了任意输出(换句话说m2
,不等待m1
完成执行)。
您可以在程序的最底部看到我得到的输出。
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 ....");
}
}
我的线程
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 ");
}
}
}
}
}
输出
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()
)开始执行。