java中的Condition协作线程接口类

迷茫
풀어 주다: 2017-03-26 16:01:25
원래의
1998명이 탐색했습니다.

在Java的Condition接口中,存在的几个方法跟Synchronized中的wait(),waitall(),wait(time ^),这个几个方法一一对应起来,但是在Lock.newCondition()返回中可以指定指定的线程释放和等待资源。

请看【唤醒单个线程】实例:

package TestThread.TestCondition; import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.*; public class TestCondition { public static void main(String[] args) { ReentrantLock lock = new ReentrantLock(); Condition condition = lock.newCondition(); Test1 th1 = new Test1(lock, condition, "线程1"); Test1 th2 = new Test1(lock, condition, "线程2"); Test1 th3 = new Test1(lock, condition, "线程3"); Test2 t2 = new Test2(condition, lock, "我是唤醒线程"); th1.start(); th2.start(); th3.start(); try { Thread.sleep(1000); t2.start(); } catch (InterruptedException e) { e.printStackTrace(); } } } class Test1 extends Thread { private ReentrantLock lock; private Condition condition1; public Test1(ReentrantLock lock, Condition condition1, String name) { super(name); this.lock = lock; this.condition1 = condition1; } @Override public void run() { for (int i = 0; i < 10; i++) { try { lock.lock();// 加锁 if (i == 5) { try { condition1.await(); System.out.println(Thread.currentThread().getName() + "当前线程获取到的值为:++++++++++++" + i); } catch (InterruptedException e) { System.out.println(Thread.currentThread().getName() + ":线程被中断了!"); } } else { System.out.println(Thread.currentThread().getName() + ":当前线程获取到的值为===》" + i); } } catch (Exception e) { System.out.println("系统发生异常!"); } finally { lock.unlock();// 解锁 } } } } class Test2 extends Thread { private Condition condition; public ReentrantLock lock; /** * @param condition协作对象 * @param lock锁对象 * @param name线程名称 */ public Test2(Condition condition, ReentrantLock lock, String name) { super(name); this.condition = condition; this.lock = lock; } @Override public void run() { try { lock.lock();// 加锁 condition.signal();// 唤醒启动单个线程 System.out.println(Thread.currentThread().getName() + ":已经唤醒了一个线程!"); } catch (Exception e) { System.out.println(Thread.currentThread().getName() + ":线程挂了!"); } finally { lock.unlock();// 解锁 } } }
로그인 후 복사

运行结果:2017-03-2501:16:17

위 내용은 java中的Condition协作线程接口类의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!