`

使用synchronized控制线程的执行顺序

    博客分类:
  • java
阅读更多

 

//线程按顺序执行:A->B->C->D
public class ThreadTest {

 private int order = 0;
 private Object lock = new Object(); //使用synchronized控制线程顺序执行
 public static void main(String[] args) {
  ThreadTest o = new ThreadTest();
  
  ThreadA t1 = o.new ThreadA();
  ThreadB t2 = o.new ThreadB();
  ThreadC t3 = o.new ThreadC();
  ThreadD t4 = o.new ThreadD();
  t1.start();
  t2.start();
  t3.start();
  t4.start();
 }

 class ThreadA extends Thread{
  public void run() {
   synchronized(lock) {
    while(order !=0) {
     try {
      lock.wait();
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
    }
     
    if(order == 0) {
     System.out.println(order);
     order++;
     lock.notifyAll();
    }
   }
  }
 }
 
 class ThreadB extends Thread{
  public void run() {
   synchronized(lock) {
   while(order !=1) {
    try {
     lock.wait();
    } catch (InterruptedException e) {
     e.printStackTrace();
    }
   }
   if(order == 1) {
    System.out.println(order);
    order++;
    lock.notifyAll();
   }else {
    
   }
  }
  }
 }
 
 class ThreadC extends Thread{
  public void run() {
   synchronized(lock) {
   while(order != 2) {
    try {
     lock.wait();
    } catch (InterruptedException e) {
     e.printStackTrace();
    }
   }
   if(order == 2) {
    System.out.println(order);
    order++;
    lock.notifyAll();
   }
   }
  }
 }
 
 class ThreadD extends Thread{
  public void run() {
   synchronized(lock) {
   while(order != 3) {
    try {
     lock.wait();
    } catch (InterruptedException e) {
     e.printStackTrace();
    }
   }
   if(order == 3) {
    System.out.println(order);
    order++;
    lock.notifyAll();
   }
  }
  }
 }
}

分享到:
评论

相关推荐

    JAVA线程高级-线程按序交替执行

    然而,在某些场景下,我们可能需要控制线程的执行顺序,确保它们按照特定的顺序交替运行,这在并发编程中被称为线程同步或线程协调。Java提供了一些高级特性来实现这样的需求,比如`Thread`类、`synchronized`关键字...

    使用synchronized实现多线程同步.pdf

    输出结果是不确定的,因为线程的执行顺序依赖于操作系统调度。 第二个示例中,`run()`方法仍然是`synchronized`的,但现在`t1`和`t2`共享同一个`Runnable`对象`r`。在这种情况下,当`t1`开始执行`run()`时,它会...

    两个线程交替执行

    多线程编程与线程同步 ...本文演示了多线程编程和线程同步的应用,展示了如何使用 synchronized 关键字、wait() 和 notify() 方法来控制线程的执行顺序。同时,本文也讨论了线程通信的重要性和多线程编程的优点。

    java10个线程按照顺序打印1-100

    在上述的10个线程顺序打印1-100的问题中,可能的解决方案包括但不限于创建一个共享的计数器,使用`synchronized`和`wait/notify`,或者使用`Semaphore`,`CyclicBarrier`等并发工具。每个解决方案都需要考虑线程安全...

    基于Java synchronized同步锁实现线程交互.pdf

    Java synchronized同步锁可以保证同一时刻只有一个线程操作同一资源,使用wait()、notify()切换线程状态保证线程操作的前后顺序实现线程交互。 Java线程状态有五种:新建状态、就绪状态、运行状态、休眠状态和死亡...

    控制台展示执行顺序

    总结来说,Java提供多种方式来控制和展示执行顺序,无论是简单的单线程输出,还是复杂的多线程同步和并发管理。理解和掌握这些技巧对于编写高效、可维护的代码至关重要。在实际项目中,合理地运用这些知识能帮助我们...

    java 两个线程相互顺序输出

    标题“java 两个线程相互顺序输出”涉及的问题是如何在多线程环境下控制线程的执行顺序,使得两个线程可以按照特定的顺序交替打印输出。这通常涉及到线程同步和通信的概念。下面将详细解释这些知识点。 1. **线程...

    Java synchronized使用案例

    Java中的`synchronized`关键字是多线程编程中的一个重要概念,用于控制并发访问共享资源,以保证数据的一致性和完整性。这个关键词提供了互斥锁机制,防止多个线程同时执行同一段代码,确保了线程安全。 一、`...

    Java使用synchronized修饰方法来同步线程的实例演示

    其他尝试进入相同代码块或方法的线程将被阻塞,直到当前线程执行完毕并释放锁。这样可以确保在任何给定时刻,只有一个线程能够执行特定的同步代码。 2. **synchronized的两种用法** - **synchronized方法**:在...

    Java 多线程有序执行的几种方法总结

    除了使用原子递增和 Holder 模式外,我们还可以使用锁机制来控制线程的执行顺序。锁机制是一种同步机制,用于解决多线程之间的同步问题。在 Java 中,我们可以使用 synchronized 关键字来实现锁机制。使用锁机制可以...

    多个线程到达后才能执行某个任务,并且只能执行一次

    1. **并发控制**:在多线程环境中,如何协调线程间的执行顺序和同步。 2. **`CountDownLatch`**:一种并发工具,用于让一组线程等待其他线程完成特定操作。 3. **原子操作**:通过`java.util.concurrent.atomic`包的...

    Java多线程中使用synchronized说明

    这意味着当一个线程进入某个对象的`synchronized`方法后,其他试图进入该对象任何`synchronized`方法的线程都将被阻塞,直到第一个线程执行完毕释放锁。在给出的示例中,`Stu`类的`read1()`和`read2()`方法都被声明...

    线程安全测试类

    本测试主要关注`synchronized`关键字的使用,以及它如何影响线程同步和线程执行顺序。 `synchronized`关键字是Java中用于实现线程同步的关键机制,它确保同一时间只有一个线程可以执行特定的代码块或方法。当一个...

    [JAVA][synchronized的使用]

    `synchronized`关键字在Java中提供了互斥访问,也就是说,当一个线程进入一个对象的`synchronized`代码块或方法时,其他线程对这个对象的`synchronized`代码块或方法的访问将会被阻塞,直到当前线程执行完毕并释放...

    前端请求,多线程执行

    4. 可能会有线程间的通信,如`wait()`, `notify()`或`notifyAll()`,以控制线程的执行顺序。 总的来说,前端请求和多线程执行是Web开发中的核心概念,它们共同确保了应用的性能和用户体验。通过理解并熟练掌握这些...

    多线程执行任务具体实现

    Java和Python等现代编程语言通常采用抢占式调度,由操作系统决定线程的执行顺序。 六、线程池 线程池可以预先创建一定数量的线程,复用这些线程来执行任务,有效减少了线程创建和销毁的开销。Java中的...

    Android synchronized 测试案例

    这样,`method1`和`method2`可以同时被不同线程执行,因为它们分别锁定的是不同的对象。 四、成功与失败案例对比 测试案例中可能会包含以下场景: 1. 成功案例:正确使用`synchronized`,确保共享资源在并发环境下...

    java多线程Demo

    一个线程调用另一个线程的join()方法,会等待该线程执行完毕后再继续执行,可以用来控制线程的执行顺序。 8. Volatile关键字: Volatile关键字可以保证线程间变量的可见性,但不能保证原子性。在多线程环境下,...

    java多线程使用

    - 避免死锁的方法包括:使用合理的锁定顺序、使用定时锁尝试以及避免持有锁的同时调用可能阻塞的方法。 #### 五、动画 虽然提供的文档没有详细描述“动画”这一部分,但可以推测这里的“动画”指的是通过Java多...

Global site tag (gtag.js) - Google Analytics