子线程先执行一段代码,再主线程再执行一段代码,两个线程都循环执行50遍。用2个condition来实现,一个是子线程的condition,一个是主线程的condition,代码如下:

package threadLock;

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock; public class ConditionCommunication { public static void main(String[] args) {
final Bussiness bus = new Bussiness(); //子线程开启
new Thread(new Runnable() { @Override
public void run() {
for (int i = ; i < ; ++i) {
bus.sub();
}
}
}).start(); //主线程开启
for (int i = ; i < ; ++i) {
bus.MAIN();
}
} } class Bussiness { private boolean subShouldAble = true; private Lock lock = new ReentrantLock(); private Condition condition1 = lock.newCondition(); private Condition condition2 = lock.newCondition(); public void sub() {
lock.lock(); //上锁,防止主线程执行
if (!subShouldAble) {//如果不是子线程执行,则子线程等待
try {
condition1.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (int j = ; j < ; j++) {
System.out.println("sub squence is :" + j);
}
subShouldAble = false;
condition2.signal(); //唤醒主线程执行
lock.unlock(); //解锁
} public void MAIN() {
lock.lock(); //上锁,防止子线程执行
while (subShouldAble) { //如果是子线程执行,则主线程等待
try {
condition2.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (int j = ; j < ; j++) {
System.out.println("main squence is :" + j);
}
subShouldAble = true;
condition1.signal(); //唤醒主线程
lock.unlock(); //解锁
} }

java线程condition的更多相关文章

  1. 在Java的Condition接口【唤醒全部线程】

    在Java的Condition接口中,存在的几个方法跟Synchronized中的wait(),waitall(),wait(time ^),这个几个方法一一对应起来,但是在Lock.newCondi ...

  2. Java线程的概念

    1.      计算机系统 使用高速缓存来作为内存与处理器之间的缓冲,将运算需要用到的数据复制到缓存中,让计算能快速进行:当运算结束后再从缓存同步回内存之中,这样处理器就无需等待缓慢的内存读写了. 缓 ...

  3. 第23章 java线程通信——生产者/消费者模型案例

    第23章 java线程通信--生产者/消费者模型案例 1.案例: package com.rocco; /** * 生产者消费者问题,涉及到几个类 * 第一,这个问题本身就是一个类,即主类 * 第二, ...

  4. Java线程新特征——Java并发库

    一.线程池   Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利.为了编写高效稳定 ...

  5. Java线程:概念与原理

    Java线程:概念与原理 一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程 ...

  6. java线程内存模型,线程、工作内存、主内存

    转自:http://rainyear.iteye.com/blog/1734311 java线程内存模型 线程.工作内存.主内存三者之间的交互关系图: key edeas 所有线程共享主内存 每个线程 ...

  7. Java线程问题分析定位

    Java线程问题分析定位 分析步骤: 1.使用top命令查看系统资源占用情况,发现Java进程占用大量CPU资源,PID为11572: 2.显示进程详细列表命令:ps -mp 11572 -o THR ...

  8. java线程详解

    Java线程:概念与原理 一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程 ...

  9. java线程详解(三)

    java线程间通信 首先看一段代码 class Res { String name; String sex; } class Input implements Runnable { private R ...

随机推荐

  1. (细节控)swift3.0与融云IMKIT开发问题(一部分) override func onSelectedTableRow Method does not override any method from its superclass

    原官网文档方案如下,在swift3.0的情况下出现 override func onSelectedTableRow  Method does not override any method from ...

  2. jQuery+HTML5声音提示

    WEB应用中,有时需要播放特定的声音,比如有新消息或者在线聊天消息声音提示,以前我们通过flash实现,今天我们将使用jQuery和HTML5结合示例来实现如何把声音提示带入WEB应用中. 在本例中, ...

  3. hdu1037

    #include <iostream> #include <cstdio> using namespace std; int main() { int a,b,c; while ...

  4. C基于客户端的通信实例

    运行环境liunx 需求:客户端对服务器发送一个TCP连接,连接成功之后发送数据并接收返回数据 代码如下: #include <sys/socket.h> #include <net ...

  5. WPF和Winform的一些界面控件

    DevExpressTelerikMahApps.MetroModern UI for WPFModernWPFExtended WPF Toolkit™ Community EditionModer ...

  6. MVC JsonResult

    public JsonResult GetJson() { var res = new JsonResult(); res.Data = new {isSucceed = true, returnMs ...

  7. TCP connect EADDRNOTAVAIL(99)错误原因分析

    转自:http://blog.chinaunix.net/uid-20662820-id-3371081.html 关于TCP connect 返回错误99,可以能大家都会遇到,这里就分析一下这个错误 ...

  8. java操作mongodb——查询数据

    通过find方法查询集合中的文档信息 -------------------------------------------------------- find() 查询所有文档信息,返回FindIt ...

  9. 使用FormData,进行Ajax请求并上传文件

    前段时间做了个手机端的图片上传,为了用户体验,用ajax交互,发现了FromData对象,这里有详细解释https://developer.mozilla.org/zh-CN/docs/Web/API ...

  10. URL中的#

    作者:阮一峰   http://www.ruanyifeng.com/blog/2011/03/url_hash.html 一.#的涵义 #代表网页中的一个位置.其右面的字符,就是该位置的标识符.比如 ...