同步方法

ros*_*dhb 0 java synchronization

我试图创建一个五个线程,因此如果一个线程在一个对象上调用synchronized方法(在这种情况下是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();
        }
        }
Run Code Online (Sandbox Code Playgroud)

kos*_*osa 5

线程执行顺序无法保证.同步确保只有一个线程在某个时间点执行该代码块,它不关心它是否是第一个线程(或)第二个线程.

如果你想按顺序执行特定的逻辑,那么你真的不需要线程.请记住,当您启动一个线程时,它将与主线程分开.可能是这个问题的答案可以帮到你.