您的位置:首页 > 编程语言 > Java开发

Java await/signal基础应用

2017-06-10 17:40 369 查看
await和signal类似wait和notify的关系,await会阻塞当前线程,直到接收到signal后唤醒继续执行,这也是线程的一种通信机制

问题:多线程交替打印字符

测试代码

package com.zhiwei.thread;

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class TheadAwait {

public boolean flag = true;
Lock lock = new ReentrantLock();
Condition condition = lock.newCondition();

public void get() {
try {
Thread.sleep(5000);
lock.lock();
while (!flag) {
condition.await();
}
System.out.println(Thread.currentThread().getName()+":-----------------");
flag = !flag;
condition.signal();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}

public void put() {
try {
Thread.sleep(5000);
lock.lock();
while (flag) {
condition.await();
}
System.out.println(Thread.currentThread().getName()+":*****************");
flag = !flag;
condition.signal();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}

public static void main(String[] args) {

TheadAwait alternatelyPrint = new TheadAwait();

while (true) {
new Thread(new Runnable() {

@Override
public void run() {
alternatelyPrint.get();
}
}).start();

new Thread(new Runnable() {

@Override
public void run() {
alternatelyPrint.put();
}
}).start();
}
}
}


效果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息