package com.test;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class ThreadTest9
{
/**
* @param args
*/
public static void main(String[] args)
{
final Utils9 ts = new Utils9();
new Thread(){
@Override
public void run()
{
for (int i = 0; i < 30; i++)
{
ts.sub(i);
}
}
}.start();
new Thread(){
@Override
public void run()
{
for (int i = 0; i < 30; i++)
{
ts.sub2(i);
}
}
}.start();
for (int i = 0; i < 30; i++)
{
ts.main(i);
}
}
}
class Utils9{
private int who = 1;
Lock lock = new ReentrantLock();
Condition condition1 = lock.newCondition();
Condition condition2 = lock.newCondition();
Condition condition3 = lock.newCondition();
public void main(int j){
lock.lock();
try{
if(who != 1){
try
{
condition1.await();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
for (int i = 1; i <= 5; i++)
{
System.out.println("this's main "+j+" runnig is "+i);
}
this.who = 2;
condition2.signal();
}finally{
lock.unlock();
}
}
public void sub(int j){
lock.lock();
try{
if(who != 2){
try
{
condition2.await();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
for (int i = 1; i <= 10; i++)
{
System.out.println("this's sub "+j+" runnig is "+i);
}
this.who = 3;
condition3.signal();
}finally{
lock.unlock();
}
}
public void sub2(int j){
lock.lock();
try{
if(who != 3){
try
{
condition3.await();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
for (int i = 1; i <= 6; i++)
{
System.out.println("this's sub2 "+j+" runnig is "+i);
}
this.who = 1;
condition1.signal();
}finally{
lock.unlock();
}
}
}
分享到:
相关推荐
Linux互斥锁、条件变量和信号量 Linux互斥锁、条件变量和信号量 Linux互斥锁、条件变量和信号量 Linux互斥锁、条件变量和信号量 Linux互斥锁、条件变量和信号量 Linux互斥锁、条件变量和信号量 Linux互斥锁、条件...
互斥锁、条件变量、信号量是系统为实现多线程(多进程)访问共享资源或共同协作的同步机制
ConsoleApp_Mutex,C++互斥锁源码cpp,可在VC++6.0或VS下直接编译运行,演示结果,控制台程序,ConsoleApp_Mutex,C++互斥锁源码cpp,可在VC++6.0或VS下直接编译运行,演示结果,控制台程序,
多线程并发编程-同步与互斥-原⼦变量-并发和⽆锁 数据结构
linux无亲缘关系间进程同步通信实现(互斥锁+条件变量+共享内存模式)
互斥锁与条件变量详解 疑问全解
在做多线程开发时,互斥锁是必不可少的。但c语言不像c++11有标准的线程库,在各种编译器支持的平台都可以使用。而且跨平台开发中,在业务逻辑里写不同平台的兼容代码,容易造成过多的冗余,以及代码结构过于复杂的...
一、互斥锁 互斥量从本质上说就是一把锁, 提供对共享资源的保护访问。 1. 初始化: 在Linux下, 线程的互斥量数据类型是pthread_mutex_t. 在使用前, 要对它进行初始化: 对于静态分配的互斥量, 可以把它设置为...
app可快速进行应用无需烦锁的创建
里面详细介绍了互斥锁与事件锁,内有DEMO,并介绍了事件锁的两种方式的对比
线程进程互斥锁
线程同步(Thread Synchronization)是并行编程中非常重要的通讯手段,其中最典型的应用就是用Pthreads提供的锁机制(lock)来对多个线程之间共 享的临界区(Critical Section)进行保护(另一种常用的同步机制是barrier)。
Linux下互斥锁的应用,用作互斥锁入门
同步读锁,异步互斥写锁源码
Linux系统编程——线程同步与互斥:互斥锁,相关教程链接如下: http://blog.csdn.net/tennysonsky/article/details/46494077
而条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足,它常和互斥锁一起配合使用。使用时,条件变量被用来阻塞一个线程,当条件不满足时,线程往往解开相应的互斥锁并等待条件发生变化。...
“原子性”的本质是什么?其实不是不可分割,不可分割只是外在表现,其本质是多个资源间有一致...(其实没有共享变量,也不会存在并发问题),所以说如果我们能够保证对共享变量的修改是互斥的,那么就能保证原子性了。
互斥锁例程
pthread_cond_wait内部会解锁,然后等待条件变量被其它线程激活 3。pthread_cond_wait被激活后会再自动加锁 激活线程: 1。加锁(和等待线程用同一个锁) 2。pthread_cond_signal发送信号 3。解锁
互斥锁是传统的并发程序对共享资源进行访问控制的主要手段。它由标准库代码包sync中的Mutex结构体类型代表。sync.Mutex类型(确切地说,是*sync.Mutex类型)只有两个公开方法——Lock和Unlock。顾名思义,前者被用于...