我试图创建一个五个线程,因此,如果一个线程调用一个对象上的同步方法(在本例中是objsyn),那么所有其他线程都应该等待该线程与该对象一起结束。因此,输出应该按照顺序从线程1到线程5。但是输出不正常。
class synctest extends Thread
{
public synchronized void display()
{
try{Thread.sleep(5000*((long)(Math.random())));}
catch(Exception e){}
System.out.println("From synchornized thread "+ Thread.currentThread().getName());
}
public synchronized void run()
{
synctest objsyn = new synctest();
objsyn.display();
}
public static void main(String args[])
{
synctest objsy = new synctest();
Thread t1 = new Thread(objsy,"Thread 1");
Thread t2 = new Thread(objsy,"Thread 2");
Thread t3 = new Thread(objsy,"Thread 3");
Thread t4 = new Thread(objsy,"Thread 4");
Thread t5 = new Thread(objsy,"Thread 5");
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
}
}发布于 2013-08-19 20:11:01
不能保证线程执行顺序。同步确保在某个时间点只执行该代码块的一个线程,它不关心它是第一个线程(还是)第二个线程。
如果您真的希望按照顺序执行特定的逻辑,那么就不需要真正的线程处理。请记住,当您启动一个线程时,它将是独立于主线程的线程。可能是answers for this question帮你。
https://stackoverflow.com/questions/18322249
复制相似问题