java多线程交替打印_java多线程 更优雅的实现线程同步:交替打印A、B LockSupport实现...
一 问题概述
线程或者进程之间有两种关系 同步和互斥,我们通常实现同步方法是使用线程的等待唤醒机制,而等待唤醒机制的使用是建立在互斥的继承上的。但是同步线程并不一定是必须要实现互斥的。比如一个线程打印A,一个线程打印B。这两个线程就没有互斥关系,但是提出这么个需求:交替打印A、B 。我们一般的解决方案,往往要使用wait()/notify机制。
二 LockSupport 介绍
LockSupport作为一个工具类,主要学习它的方法。
park():在线程内调用,表示当前线程自我阻塞,直到获得许可证
park(线程变量):让指定的线程获得许可证。
一看这两个方法的定义,显然可以利用这两个方法实现线程的顺序调用(同步)
三 两种思路实现交替打印A/B
等待唤醒机制:
/**
* @program: test
* @description: 交替打印A/B 等待唤醒机制
* @author:
* @create: 2019-07-22 14:28
*/
public class Test3 {
static class MyRun implements Runnable {
static int i = 0;
@Override
public synchronized void run() {
for (int j = 0; j < 10; j++) {
if(i%2==0)
System.out.println(Thread.currentThread().getName()+":A");
else
System.out.println(Thread.currentThread().getName()+":B");
i++;
this.notifyAll();
try {
if(i>=19)
Thread.sleep(10);
else
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
MyRun myRun = new MyRun();
Thread a = new Thread(myRun);
Thread b = new Thread(myRun);
a.start();
b.start();
}
}
LockSupport 实现
/**
* @program: test
* @description:交替打印A,B LockSupport实现
* @author:
* @create: 2019-07-22 14:03
*/
public class Test2 {
static Thread a=null;
static Thread b=null;
public static void main(String[] args) {
a= new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
LockSupport.park();
System.out.println(Thread.currentThread().getName()+":B");
LockSupport.unpark(b);
}
}
});
b=new Thread((new Runnable() {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+":A");
LockSupport.unpark(a);
LockSupport.park();
}
}
}));
a.start();
b.start();
}
}
java多线程交替打印_java多线程 更优雅的实现线程同步:交替打印A、B LockSupport实现...相关推荐
- java 不取空值_Java:如何更优雅的处理空值?
在笔者几年的开发经验中,经常看到项目中存在到处空值判断的情况,这些判断,会让人觉得摸不着头绪,它的出现很有可能和当前的业务逻辑并没有关系.但它会让你很头疼. 有时候,更可怕的是系统因为这些空值的情况, ...
- java 锁旗标_Java多线程
Java多线程 1. 多线程存在的意义 多线程最大的作用就是能够创建"灵活响应"的桌面程序,而编写多线程最大的困难就是不同线程之间共享资源的问题,要使这些资源不会同时被多个线程访问 ...
- java 多线程并发 问题_JAVA多线程和并发基础面试问答
原文链接 译文连接作者:Pankaj 译者:郑旭东 校对:方腾飞 多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌 ...
- java多线程 cpu分配_java多线程总结(转载)
Java 多线程编程总结 --------------------------------------------------------------------------------------- ...
- java 多线程 最优_Java多线程与并发系列从0到1全部合集,强烈建议收藏!
在过去的时间中,我写过Java多线程与并发的整个系列. 为了方便大家的阅读,也为了让知识更系统化,这里我单独把Java多线程与并发的整个系列一并罗列于此,希望对有用的人有用,也希望能帮助到更多的人. ...
- java点名代码滚动_JAVA多线程实现简单的点名系统
效果图如下: CMain函数: package com.shubing.main; public class CMain { public static void main(String[] args ...
- java多线程编码实现_Java多线程编码
Java多线程编码 多线程一直是编写程序代码的一个核心,Java中实现方法有以下两种: 一.继承自Thread class Mythread extends Thread [ //方法 public ...
- java多线池_java多线程之线程池
1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable() { @Override public void run() { ...
- java多线程共享信息_java多线程信息共享
上篇文章知识介绍了多线程的创建和启动问题,各个子线程和子线程或者说子线程和main线程没有信息的交流,这篇文章主要探讨线程之间信息共享以及交换问题.这篇文章主要以一个卖票例子来展开. 继承Thread ...
最新文章
- 如何在JQuery $ .each函数中编辑全局变量?
- 计算机英语应用研究,计算机英语辅助学习系统的研究与应用-软件工程专业论文.docx...
- 数学之美 系列十六(上) 不要把所有的鸡蛋放在一个篮子里 -- 谈谈最大熵模型
- linux fedora设置开机自动挂载win磁盘
- npm install -g -S -D的区别及应用场景
- 8个超棒的使用javascript开发的视觉特效网站
- 【Hbase】程序批量put数据到Hbase
- Docker学习总结(31)——使用Maven插件构建docker镜像
- 2019 outlook 数据迁移_清华开源迁移学习算法库
- Python数据结构与算法笔记(三):查找问题——列表查找
- Kubernetes vs OpenStack
- 刷新后保持大分类和小分类的展开状态
- golang ide 下载
- C语言:cJSON库用法详解
- linux用gzip文件,Linux中的Gzip命令
- vue项目引入typescript(vue与ts混用)
- Doris 与 ClickHouse 的深度对比
- activemq、rabbitmq、kafka原理和比较
- 【ABviewer从零开始教学查看器篇①】3D查看器和3D剖面板
- Go netpoll I/O 多路复用构建原生网络模型之源码深度解析
热门文章
- Numpy的广播功能
- Linux系统管理——系统启动和内核管理
- redis 数据类型详解 以及 redis适用场景场合
- 3.9 限制root远程登录
- 使用Visual Studio Code + Node.js搭建TypeScript开发环境
- 前端性能优化方面的知识
- 老鸟的Python新手教程
- mac使用eclipse创建java_【Java】Mac上使用Eclipse创建Java项目的一般步骤
- python numpy数组切片_python中numpy数组切片实验解释
- 二进制包如何知道go 版本_你有同时使用多版本 Go 语言的需求吗,那就快使用多版本管理利器 GVM 吧!...