• 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();
    }
    }
  • 相关阅读:
    JavaBean理解
    你应该掌握的七种回归技术
    回归分析步骤
    rsync命令(同步/备份数据)
    获取客户端访问的ip地址
    SSO单点登陆
    产品分类之属性选择
    linux的SVN搭建与同步
    php 实现 mysql数据表优化与修复
    php程序备份还原mysql数据库
  • 原文地址:https://www.cnblogs.com/ctaixw/p/7967343.html
Copyright © 2020-2023  润新知