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

    package com.czbk.thread;

    /**
    * Created by chengtao on 17/12/3.
    * 需求: 子线程先运行10次,然后主线程运行 100次,依次运行50次
    *
    wait(): 等待 如果线程执行了wait方法,那么该线程会进入等待的状态,等待状态下的线程必须要被其他线程调用notify方法才能唤醒。
    notify(): 唤醒 唤醒线程池等待线程其中的一个。
    notifyAll() : 唤醒线程池所有等待 线程。

    wait与notify方法要注意的事项:
    1. wait方法与notify方法是属于Object对象 的。
    2. wait方法与notify方法必须要在同步代码块或者是同步函数中才能 使用。不在同步代码里执行,会报错
    3. wait方法与notify方法必需要由锁对象调用。


    wait():一个线程如果执行了wait方法,那么改线程就会进入一个以锁对象为标识符的线程池中等待。
    此时 线程释放了锁,进入“临时阻塞”状态,并在其他线程调用notify方法才能将其唤醒,
    唤醒后的该线程是“可 运行”状态,获得到cpu后即可执行。
    Notify():如果一个线程执行notify方法,那么就会唤醒以锁对象为标识符的线程池中等待线程中的其中一个。
    锁对象是Object 对象;
    只有同步代码块或同步方法中才有锁;
    线程池是以锁为标识符建立的
    */

    import java.util.concurrent.atomic.AtomicInteger;

    public class Thread04_TraditionalThread_Communication {
    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);
    }

    }

    }
    class Business {
    private boolean bShouldSub = true;
    public synchronized void sub(int i){
    while(!bShouldSub){
    try {
    this.wait();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    for(int j=1;j<=10;j++){
    System.out.println("sub thread sequence of " + j + ",loop of " + i);
    }
    bShouldSub = false;
    this.notify();
    }

    public synchronized void main(int i){
    while(bShouldSub){
    try {
    this.wait();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    for(int j=1;j<=100;j++){
    System.out.println("main thread sequence of " + j + ",loop of " + i);
    }
    bShouldSub = true;
    this.notify();
    }
    }
  • 相关阅读:
    LR--用栈实现移进--归约分析(demo)
    阿里云ECS服务器socket无法连接的问题
    select客户端模型封装——回调方式快速建立客户端
    select服务器端模型封装——回调方式快速建立服务端
    python实现的ocr接口
    汉字字典树
    linux下简易端口扫描器
    Linux下cs简单通讯(socket)
    POj 1321 棋盘问题 DFS 回溯
    HDU 1097 快速幂
  • 原文地址:https://www.cnblogs.com/ctaixw/p/7967343.html
Copyright © 2011-2022 走看看