/** * @author lanwei 2018-05-19 */ public class ConditonPrintAB { public static void main(String[] a) { PrintAB printAB = new PrintAB(); new Thread(() -> printAB.print1()).start(); new Thread(() -> printAB.print2()).start(); } public static class PrintAB { private Lock lock = new ReentrantLock(); private Condition c1 = lock.newCondition(); private Condition c2 = lock.newCondition(); private volatile int state = 0; /** * 打印奇数 */ public void print1() { print(1, c1, c2); } /** * 打印偶数 */ public void print2() { print(0, c2, c1); } public void print(int flag, Condition cuerrentConditon, Condition nextConditin) { for (; ; ) { try { lock.lock(); // 状态判断 while (state % 2 == flag) { cuerrentConditon.await(); } if (state > 100) { return; } System.out.println(Thread.currentThread().getName() + ": " + state++); nextConditin.signal(); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } } } }
相关推荐
Capslock+软件下载http://cjkis.me/capslock+/
Capslock++(AutoHotKey脚本),改造Capslock键,快速提升工作效率
多线程依次循环打印26个英文字母
使用C++11标准的的线程语法,用两个线程轮流打印整数,一个线程打印奇数,一个线程打印偶数。可以练习线程的基本操作、线程锁和条件变量等技术。完整代码如下。代码后面附有主要语句的讲解。 #include #include #...
比较实用,是操作系统很好的教辅资料。很详细的讲解。
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
Capslock+是一个加强 Capslock 键的功能,以提高效率的工具。
关键字-回车映射-ahk回车映射-左手回车 ;;快捷键x说明 上下左右 ... CapsLock+q 箭头上--防止误触屏-CapsLock+q也映射为箭头上 ;; CapsLock+e 删除键-删除前面的-Backspace ;; CapsLock+r 删除键-删除后面的--Del
通过java语言编写的生产者消费者,实现方法为lock类和condition类的配合完成。
本实现涉及到几个知识点 std::lock_guard 介绍 std::lock_gurad 是 C++11 中定义的模板类。定义如下: template <class> class lock_guard; lock_guard 对象通常用于管理某个锁(Lock)对象,因此与 Mutex RAII ...
虚拟桌面 Super+Anti-lock+Expert
在jdk1.5以后,JAVA提供了Lock类来实现和synchronized一样的功能,并且还提供了Condition来显示线程间通信。 Lock类是Java类来提供的功能,丰富的api使得Lock类的同步功能比synchronized的同步更强大。本文章的所有...
C++11中的各种mutex, lock对象,实际上都是对posix的mutex,condition的封装。不过里面也有很多细节值得学习。 std::mutex 先来看下std::mutex: 包增了一个pthread_mutex_t __m_,很简单,每个函数该干嘛...
使用场景为一个线程写一个线程读完全不需要锁。可以设定buffer的初始块及数量,初始块是固定大小的,当需要扩环时会动态创建块即不像其它的库块满了就写失败了,当释放时会将动态创建的块还给系统,初始块还给自己的...
为了使不同线程在使用统一共享内存时线程之间互不影响,需要使用 “Lock()”方法。 具体实现: import threading def job1(): global A, lock lock.acquire() #内存上锁 for i in range(10): A += 1 print('job1', A...
Python应用实战:python多线程-多线程安全问题&lock与rlock.zip
线程 是c# 的一个难点,这里将线程的相关用法上传上了大家分享。希望有用
目前我们已经会使用Lock去对公共资源进行互斥访问了,也探讨了同一线程可以使用RLock...使用Condition的主要方式为:线程首先acquire一个条件变量,然后判断一些条件。如果条件不满足则wait;如果条件满足,进行一些处
实现yarn.lock与package-lock.json相互转换
9 切换回上次使用的桌面CapsLock +选项卡切换到左侧的虚拟桌面(从第一个桌面自动循环到最后一个桌面) CapsLock + A CapsLock + P 切换到右侧的虚拟桌面(从最后一个桌面自动循环到第一个桌面) CapsLock + ...