当前位置:首页 > 后端开发 > java多线程--简易使用同步锁实现一对一交替打印

java多线程--简易使用同步锁实现一对一交替打印

7个月前 (05-24)29
  • 一、本例需要分析的地方不多,只需要使用一个同步锁+一个计数器就能搞定,直接奉送源码吧:
package com.example.liuxiaobing.statemodel.mutil_thread.onebyoneprint;

/**
 * Created by liuxiaobing
 * Date on 2018/9/23
 * Copyright 2013 - 2018 QianTuo Inc. All Rights Reserved
 * Desc: 2个线程交替打印
 */

public class Print  {

    private boolean printing = false;


    public synchronized void print(String name) throws InterruptedException {

        while(!printing){
            wait();
        }
        System.out.println("20---------:当前线程:"+Thread.currentThread().getName() + " 打印东西:"+name);
        printing = false;
        notifyAll();
    }


    public synchronized void print2(String name) throws InterruptedException {

        while(printing){
            wait();
        }
        System.out.println("31---------:当前线程:"+Thread.currentThread().getName() + " 打印东西:"+name);
        printing = true;
        notifyAll();

    }
}

  • 二、测试用的打印线程:
package com.example.liuxiaobing.statemodel.mutil_thread.onebyoneprint;

/**
 * Created by liuxiaobing
 * Date on 2018/9/23
 * Copyright 2013 - 2018 QianTuo Inc. All Rights Reserved
 * Desc:
 */

public class PrintThread extends Thread {

    private boolean isStop = false;
    private Print mPrint;

    public PrintThread(String name,Print print){
        setName(name);
        mPrint = print;
    }

    @Override
    public void run() {
        super.run();
        while (!isStop){
            try {
                Thread.sleep(100);
                mPrint.print("打印简历");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

package com.example.liuxiaobing.statemodel.mutil_thread.onebyoneprint;

/**
 * Created by liuxiaobing
 * Date on 2018/9/23
 * Copyright 2013 - 2018 QianTuo Inc. All Rights Reserved
 * Desc:
 */

public class Print2Thread extends Thread {

    private boolean isStop = false;
    private Print mPrint;

    public Print2Thread(String name,Print print){
        setName(name);
        mPrint = print;
    }

    @Override
    public void run() {
        super.run();
        while (!isStop){
            try {
                Thread.sleep(100);
                mPrint.print2("打印ppt");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
  • 三、测试例子
   private void testThreadPrintOneByOne(){
       Print print = new Print();
       PrintThread printThread1 = new PrintThread("1",print);
       Print2Thread printThread2 = new Print2Thread("2",print);

       printThread1.start();
       printThread2.start();



   }

java多线程--简易使用同步锁实现一对一交替打印 _ Java侠

作者:劉胡來
来源链接:https://blog.csdn.net/d06110902002/article/details/82821173

“java多线程--简易使用同步锁实现一对一交替打印” 的相关文章

愚人节老板发话了,免费送书 + 免费入驻Java知识星球!!

愚人节老板发话了,免费送书 + 免费入驻Java知识星球!!

愚人节快乐,今天的活动很重磅! 1、免费送5本重量级技术书籍,不骗人,小程序随机抽奖送出哦! 2、免费进星球,哈哈不可能,愚人节快乐!不过今天有重大优惠,见下文! 活动一:免...

Java8避免非空判断

如何预防 Java 中著名的 NullPointerException 异常?这是每个 Java 初学者迟早会问到的关键问题之一。而且中级和高级程序员也在时时刻刻规避这个错误...

配置mac上Java环境变量

从ubuntu上转到mac上来做开发,一切配置都要重新开始 1. 下载jre http://www.oracle.com/technetwork/java/javase/do...

Java (JDK 多版本切换)—— Windows平台

Java (JDK 多版本切换)—— Windows平台

0. 背景     常常在不同的应用中需要用到不同版本的Java ,需要切换不同JAVA_HOME. 1. 方法    Step...

JAVA学习笔记-Date类

JAVA学习笔记-Date类

在标准Java类库中包含一个Date类。它的对象表示一个特定的瞬间,精确到毫秒。 Java中时间的表示说白了也是数字,是从:标准纪元1970.1.1 0点开始到某个时刻的毫秒数(此...

java判断字符为空

java怎么判断字符是否为空 发布时间:2020-06-29 18:07:03 来源:亿速云 阅读:179 作者:Leah...

MyEclipse 6.0 汉化 及java环境变量配置

MyEclipse 6.0 汉化 1:汉化:(假设安装路径是:D:/Program Files/MyEclipse 6.0)最麻烦的地方到了,慢慢来……首先,运行目录<D:/...

【Java】把一个对象转化为String字符串

把一个对象obj转化为字符串,我有三个想法。 obj + ""; obj.toString(); String.value...

Elasticsearch 2.X 版本Java插件开发简述

Elasticsearch 2.X 版本Java插件开发简述

1:elasticsearch插件分类简述 2:Java插件开发要点 3:如何针对不同版本elasticsearch提供多版本的插件 4:插件具有外部依赖时遇到的一些问...

ubuntu下配置java环境变量

一. 解压安装jdk   在shell终端下进入jdk-6u14-linux-i586.bin文件所在目录,  执行命令 ./jdk-6u...