zoukankan      html  css  js  c++  java
  • java 多线程 day13 condition 线程通信


    /**
    * Created by chengtao on 17/12/5.
    * Condition 类似 wait和notify,解决线程间的同步问题
    */


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

    public class Thread1301_ConditionCommunication {

    /**
    * @param args
    */
    public static void main(String[] args) {

    final Business business = new Business();
    new Thread(
    new Runnable() {
    public void run() {
    for(int i=1;i<=50;i++){
    business.sub(i);
    }
    }
    }
    ).start();

    for(int i=1;i<=50;i++){
    business.main(i);
    }

    }

    static class Business {
    Lock lock = new ReentrantLock();
    Condition condition = lock.newCondition();
    private boolean bShouldSub = true;
    public void sub(int i){
    lock.lock();
    try{
    while(!bShouldSub){
    try {
    condition.await();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    for(int j=1;j<=10;j++){
    System.out.println("sub thread sequence of " + j + ",loop of " + i);
    }
    bShouldSub = false;
    condition.signal();
    }finally{
    lock.unlock();
    }
    }

    public void main(int i){
    lock.lock();
    try{
    while(bShouldSub){
    try {
    condition.await();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    for(int j=1;j<=100;j++){
    System.out.println("main thread sequence of " + j + ",loop of " + i);
    }
    bShouldSub = true;
    condition.signal();
    }finally{
    lock.unlock();
    }
    }
    }
    }
    --------------------------------
    --------------------------------
    --------------------------------

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

    public class Thread1302_Condition_3ThreadCom {

    public static void main(String[] args) {

    final Business business = new Business();
    new Thread(
    new Runnable() {
    public void run() {
    for(int i=1;i<=50;i++){
    business.sub2(i);
    }
    }
    }
    ).start();

    new Thread(
    new Runnable() {
    public void run() {
    for(int i=1;i<=50;i++){
    business.sub3(i);
    }
    }
    }
    ).start();

    for(int i=1;i<=50;i++){
    business.main(i);
    }

    }

    static class Business {
    Lock lock = new ReentrantLock();
    Condition condition1 = lock.newCondition();
    Condition condition2 = lock.newCondition();
    Condition condition3 = lock.newCondition();
    private int shouldSub = 1;
    public void sub2(int i){
    lock.lock();
    try{
    while(shouldSub != 2){
    try {
    condition2.await();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    for(int j=1;j<=10;j++){
    System.out.println("sub2 thread sequence of " + j + ",loop of " + i);
    }
    shouldSub = 3;
    condition3.signal();
    }finally{
    lock.unlock();
    }
    }

    public void sub3(int i){
    lock.lock();
    try{
    while(shouldSub != 3){
    try {
    condition3.await();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    for(int j=1;j<=20;j++){
    System.out.println("sub3 thread sequence of " + j + ",loop of " + i);
    }
    shouldSub = 1;
    condition1.signal();
    }finally{
    lock.unlock();
    }
    }

    public void main(int i){
    lock.lock();
    try{
    while(shouldSub != 1){
    try {
    condition1.await();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    for(int j=1;j<=100;j++){
    System.out.println("main thread sequence of " + j + ",loop of " + i);
    }
    shouldSub = 2;
    condition2.signal();
    }finally{
    lock.unlock();
    }
    }
    }
    }

     
  • 相关阅读:
    mac 配置 iterm2
    python面试题
    待办事项--flask
    八皇后问题c语言版(xcode下通过)
    对分布式一些理解
    观察者模式
    用redis实现悲观锁(后端语言以php为例)
    只用200行Go代码写一个自己的区块链!(转)
    php的生命周期的概述
    linux网络编程1 最简单的socket编程
  • 原文地址:https://www.cnblogs.com/ctaixw/p/7980300.html
Copyright © 2011-2022 走看看