java - 同步方式

标签 java synchronization

我尝试创建五个线程,相应地,如果一个线程调用一个对象(在本例中为 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();
        }
        }

最佳答案

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

如果您想真正按顺序执行特定逻辑,那么您实际上并不需要线程。请记住,当您启动一个线程时,它将是与主线程分开的线程。可能是answers for this question帮助你。

关于java - 同步方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18322249/

相关文章:

iphone - 在开发过程中备份 iPhone 应用程序(在应用程序商店上架之前)

java - 配置Spring JPA连接MySQL

java - Apache Camel 合并来自不同路径的两个文件

Java同步和访问静态字段的静态同步方法

c++ - 如果 pthread_cond_signal 是线程中的最后一次调用,是否存在数据竞争?

C# 内存模型和非 volatile 变量在其他线程创建之前初始化

java - 从 Hazelcast 网格获取主 IP 地址

java - 正确实现乒乓球游戏

c# - C# 和 Java 中的泛型与 C++ 中的模板有什么区别?

c - 命名信号量只是不工作