多线程(JDK1.5的新特性互斥锁)(掌握)
1.同步
·使用ReentrantLock类的lock()和unlock()方法进行同步
2.通信
·使用ReentrantLock类的newCondition()方法可以获取Condition对象
·需要等待的时候使用Condition的await()方法, 唤醒的时候用signal()方法
·不同的线程使用不同的Condition, 这样就能区分唤醒的时候找哪个线程了
举例:

public static void main(String[] args) {
final UnitTest ut = new UnitTest();
Thread t1 = new Thread(new Runnable() {
public void run() {
while(true){
ut.print1();
}
}
});
Thread t2 = new Thread(new Runnable() {
public void run() {
while(true){
ut.print2();
}
}
});
Thread t3 = new Thread(new Runnable() {
public void run() {
while(true){
ut.print3();
}
}
});
t1.start();
t2.start();
t3.start();
}
private ReentrantLock r =new ReentrantLock();
Condition c1 = r.newCondition();
Condition c2 = r.newCondition();
Condition c3 = r.newCondition();
private int flag = 1;

public void print1() {

r.lock();
if(flag!=1){
try {
System.out.println("jinru 11");
c1.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("11");
flag=2;
c2.signal();
r.unlock();
}
public void print2() {
r.lock();
if(flag!=2){
try {
System.out.println("jinru 22");
c2.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("22");
flag=3;
c3.signal();
r.unlock();
}
public void print3() {
r.lock();
if(flag!=3){
try {
System.out.println("jinru 33");
c3.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("33");
flag=1;
c1.signal();
r.unlock();
}

多线程(JDK1.5的新特性互斥锁)的更多相关文章

  1. Java高新技术 JDK1.5之新特性

      Java高新技术  JDK1.5的新特性 知识概要:                 (1)静态导入 (2)可变参数 (3)增强for循环 (4)基本数据类型的自动拆箱和装箱 静态导入     ...

  2. 转: 【Java并发编程】之二十:并发新特性—Lock锁和条件变量(含代码)

    简单使用Lock锁 Java5中引入了新的锁机制--Java.util.concurrent.locks中的显式的互斥锁:Lock接口,它提供了比synchronized更加广泛的锁定操作.Lock接 ...

  3. 【Java并发编程】:并发新特性—Lock锁和条件变量

    简单使用Lock锁 Java5中引入了新的锁机制——Java.util.concurrent.locks中的显式的互斥锁:Lock接口,它提供了比synchronized更加广泛的锁定操作.Lock接 ...

  4. JAVA JDK1.5-1.9新特性

    1.51.自动装箱与拆箱:2.枚举(常用来设计单例模式)3.静态导入4.可变参数5.内省 1.61.Web服务元数据2.脚本语言支持3.JTable的排序和过滤4.更简单,更强大的JAX-WS5.轻量 ...

  5. java--加强之 jdk1.5简单新特性,枚举,注解

    转载请申明出处:http://blog.csdn.net/xmxkf/article/details/9944041 Jdk1.51新特性(静态导入,可变参数,加强for循环,自动拆装箱) 08.ja ...

  6. 各版本JDK1.5-1.8新特性

    概述 一jdk15新特性 泛型 foreach 自动拆箱装箱 枚举 静态导入Static import 元数据Metadata 线程池 Java Generics 二jdk16新特性 Desktop类 ...

  7. 20190102(多线程,守护线程,线程互斥锁,信号量,JoinableQueue)

    多线程 多进程: 核心是多道技术,本质上就是切换加保存技术. 当进程IO操作较多,可以提高程序效率. 每个进程都默认有一条主线程. 多线程: 程序的执行线路,相当于一条流水线,其包含了程序的具体执行步 ...

  8. JDK1.8的新特性

    JAVA8新特性 接口改善 现在接口里已经完全可以定义静态方法了. 举一个比较普遍的例子就是在java类库中, 对于一些接口如Foo, 都会有一个有静态方法的工具类Foos 来生成或者配合Foo对象实 ...

  9. jdk1.8的新特性:很全面

    JDK1.8: https://www.cnblogs.com/tiantianbyconan/p/3613506.html stream的几个方法: filter: 过滤条件 过滤为空的方法: 刚好 ...

随机推荐

  1. ac1008

    这题说的是 给了n个点在圆 上 然后 i连 i+2 从i+2 开始连 i+4  然后 这样一直到某个点 已经被连过为止   如果还有的没有被连过 就从那个点开始 连 按照上面的规则 当 N大于6 的时 ...

  2. CATiledLayer

    CATiledLayer 有些时候你可能需要绘制一个很大的图片,常见的例子就是一个高像素的照片或者是地球表面的详细地图.iOS应用通畅运行在内存受限的设备上,所以读取整个图片到内存中是不明智的.载入大 ...

  3. Linux基础命令---which

    which 在环境变量PATH中搜索某个命令,返回命令的执行文件或者脚本位置,默认只显示第一个结果.这需要一个或多个参数.对于它的每个参数,它会打印出当在shell提示符下输入该参数时将执行的可执行文 ...

  4. Kali连接不上ssh

    1.修改sshd_config文件 vim /etc/ssh/sshd_config 将#PasswordAuthentication yes的注释去掉 将#PermitRootLogin prohi ...

  5. 函数指针(pointer to function)——qsort函数应用实例

    一,举例应用 在ACM比赛中常使用 stdlib.h 中自带的 qsort 函数,是教科书式的函数指针应用示范. #include <stdio.h> #include <stdli ...

  6. QTQuick控件基础(3)视图

    1.spliteview 2.stackview ApplicationWindow {visible: truewidth: 640height: 480MouseArea{anchors.fill ...

  7. 基于qml创建最简单的图像处理程序(1)-基于qml创建界面

    <基于qml创建最简单的图像处理程序>系列课程及配套代码基于qml创建最简单的图像处理程序(1)-基于qml创建界面http://www.cnblogs.com/jsxyhelu/p/83 ...

  8. 20165310_Exp2实验二《Java面向对象程序设计》

    实验二<Java面向对象程序设计> TDD与单元测试 前期准备: 什么是单元测试? 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证.对于单元测试中单元的含 ...

  9. Linux查看网卡带宽的两个命令

    1.ethtool ethtool 网络接口名 #ethtool em4 Settings for em4: Supported ports: [ TP ] Supported link modes: ...

  10. excel依赖的dll

    依赖的先后顺序 stdole.dll office.dll Microsoft.Vbe.Interop.dll Microsoft.Office.Interop.Excel.dll Interop是i ...