资讯专栏INFORMATION COLUMN

两个线程交替输出1~20(使用条件锁)

MarvinZhang / 1938人阅读

摘要:第一个线程,从开始如果另一个线程等待,则唤醒对方之后,自己等待如果另一个线程等待,则唤醒对方之后,自己等待使用条件锁最重要的是,自己等待之前,一定要唤醒其他线程,并且记住要释放锁。

public class testThread {

   public static void main(String[] args) {

      ReentrantLock lock=new ReentrantLock();
      Condition one =lock.newCondition();
      Condition two=lock.newCondition();
      //第一个线程,从1开始
      new Thread(new Runnable() {
         @Override
         public void run() {
            int i = 1;
            while (i<=20){
               lock.lock();
               System.out.print("
thread--1----:"+i);
               try {
               //如果另一个线程等待,则唤醒对方之后,自己等待
                  two.signalAll();
                  one.await();
                  i=i+2;
               } catch (InterruptedException e) {
                  e.printStackTrace();
               }
               finally {
                  lock.unlock();
               }
            }
         }
      }).start();
      new Thread(new Runnable() {
         @Override
         public void run() {
            int i = 2;
            while (i<=20){
               lock.lock();
               System.out.print("
thread--2----:"+i);
               try {
               //如果另一个线程等待,则唤醒对方之后,自己等待
                  one.signalAll();
                  two.await();
                  i=i+2;
               } catch (InterruptedException e) {
                  e.printStackTrace();
               } finally {
                  lock.unlock();
               }
            }
         }
      }).start();
   }
}

使用条件锁最重要的是,自己等待之前,一定要唤醒其他线程,并且记住finally要释放锁。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/70952.html

相关文章

  • 线程编程:wait, notify, join, yield都有啥用?

    摘要:通知任一一个进入等待状态的线程,通知所有让调用线程阻塞在这个方法上,直到的线程完全执行完毕,调用线程才会继续执行。通知调度器,主动让出对的占用。 多线程在开发知识中是一个很重要的部分,然而实际生产中却很少遇到真正需要自己去处理多线程编程里的那些复杂细节和问题,因为很多时候,都有一套架构或者一些框架帮大部分业务程序员隐藏了多线程的细节,大多时候只需要简单的实现各种业务逻辑即可。 今天来理...

    lovXin 评论0 收藏0
  • 第二章 线程安全性

    摘要:第二章线程安全性线程安全性的理解定义某个类的行为与其规范完全一致原子性竞态条件理解当操作的正确的结果取决于多个线程的交替执行时序,就会发生竞态条件。 第二章 线程安全性 2.1 线程安全性的理解 定义:某个类的行为与其规范完全一致 2.2 原子性 2.2.1 竞态条件 理解:当操作的正确的结果取决于多个线程的交替执行时序,就会发生竞态条件。常见的竞态条件类型是先检查后执行,首先观察到某...

    fsmStudy 评论0 收藏0
  • JVM笔记-13

    摘要:不可变如绝对线程安全就是满足并发编程实战中对线程安全的定义在中标注自己是线程安全的类,大都不是绝对的线程安全。如的和二实现线程安全的方法互斥同步互斥是因同步是果互斥是方法同步是目的。 一.到底什么叫线程安全:java并发编程实战中对线程安全的定义是:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,...

    cyixlq 评论0 收藏0
  • JCIP阅读笔记之线程安全性

    摘要:大多数都是线程安全的,所以极大降低了在实现线程安全性的复杂性。只有在处理请求需要保存一些信息的情况下,线程安全性才会成为一个问题。虽然这种方式可以保证线程安全,但是性能方面会有些问题。 本文是作者在阅读JCIP过程中的部分笔记和思考,纯手敲,如有误处,请指正,非常感谢~ 可能会有人对书中代码示例中的注解有疑问,这里说一下,JCIP中示例代码的注解都是自定义的,并非官方JDK的注解,因此...

    nanchen2251 评论0 收藏0
  • 并发模型:线程

    摘要:文章结构来自七周七并发模型互斥和内存模型创建线程这段代码创建并启动了一个实例,首先从开始,函数的余下部分一起并发执行。在锁定状态下,某些线程拥有锁在非锁定状态下,没有线程拥有它。 并发&并行 并发程序含有多个逻辑上的独立执行块,他们可以独立的并行执行,也可以串行执行。并行程序解决问题的速度比串行程序快的多,因为其可以同时执行整个任务的多个部分。并行程序可能有多个独立执行块,也可能只有一...

    JasinYip 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<