java 两个线程
简介
使用synchronized, 来实现两个线程的同步操作.
参考链接
https://www.cnblogs.com/leihuazhe/p/7898563.html
TIPS
唤醒一个在等待资源的线程.
public final native void notify();
阻塞资源, 等待被唤醒.
public final void wait() throws InterruptedException {
wait(0);
}
Synchronized 锁的对象是方法的调用者, 两个方法用的是同一个锁, 谁先拿到谁先执行
code
/**
* Created by lee on 2021/6/21.
*/
public class Add {
public synchronized void one() throws InterruptedException {
boolean flag = true;
while(flag) {
for(int i = 1; i<=99; i+=2) {
System.out.println(Thread.currentThread().getName()+ " i " + i);
if(i == 99) {
flag = false;
this.notify();
break;
}
this.notify();
this.wait();
}
}
}
public synchronized void two() throws InterruptedException {
boolean flag = true;
while(flag) {
for(int i = 2; i<=100; i+=2) {
System.out.println(Thread.currentThread().getName()+ " i " + i);
if(i == 100) {
flag = false;
this.notify();
break;
}
this.notify();
this.wait();
}
}
}
public static void main(String[] args) {
Add a = new Add();
new Thread(()->{
try {
a.one();
} catch (InterruptedException e) {
e.printStackTrace();
}
},"A").start();
new Thread(()->{
try {
a.two();
} catch (InterruptedException e) {
e.printStackTrace();
}
},"B").start();
}
}
结果
B i 98
A i 99
B i 100
java 两个线程的更多相关文章
- Java两个线程实现交替运行-以交替打印奇偶数为例
本文旨在两个线程交替运行,不多哔哔直接看代码吧 public class Work2 { static final Object object = new Object(); public stati ...
- Java值创建线程的两种方式对比
在Java中创建线程的方式有两种,第一种是直接继承Thead类,另一种是实现Runable接口.那么这两种方式孰优孰劣呢? 采用继承Thead类实现多线程: 优势:编写简单,如果需要访问当前线程,只需 ...
- 使用Java线程并发库实现两个线程交替打印的线程题
背景:是这样的今天在地铁上浏览了以下网页,看到网上一朋友问了一个多线程的问题.晚上闲着没事就决定把它实现出来. 题目: 1.开启两个线程,一个线程打印A-Z,两一个线程打印1-52的数据. 2.实现交 ...
- Java并发 两个线程交替执行和死锁
今天看到一个题:两个线程交替打印奇数和偶数,即一个线程打印奇数,另一个打印偶数,交替打印从1到100.想了下有多重实现方法. wait和notify方法: public class OddEven { ...
- java的两种线程
java中的两种线程 守护线程与用户线程 守护线程:就是服务于用户线程的线程,例如垃圾回收的线程及时最典型的守护线程.不需要上层逻辑的介入 用户线程:就是程序自己创建的线程 守护线程; 守护线 ...
- Java实现卖票程序(两种线程实现)
/** * 2019年8月8日16:05:05 * 目的:实现火车站卖票系统(第一种创建线程的方式) * @author 张涛 * */ //第一种方式直接继承Thread来创建线程 class T1 ...
- [Java并发]实现两个线程交替打印奇偶数(volatile+yield实现)
解题思路 实现一个类OddEven 有一个打印奇数的方法,有一个打印偶数的方法. 类中有一个volatile变量 ,用来控制当前状态是该哪个方法打印. 方法中打印每个数前首先判断volatile变量的 ...
- Java多线程 3 线程同步
在之前,已经学习到了线程的创建和状态控制,但是每个线程之间几乎都没有什么太大的联系.可是有的时候,可能存在多个线程多同一个数据进行操作,这样,可能就会引用各种奇怪的问题.现在就来学习多线程对数据访问的 ...
- java 多线程 4 线程池
系统启动一个新线程的成本是比较高的,因为它涉及到与操作系统的交互.在这种情况下,使用线程池可以很好的提供性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池. 与数据库连接池类似 ...
- 小谈Java里的线程
今天,我们来谈一谈Java里的线程. 一.进程与线程的基本概念 大家可能没听过线程这个概念,但是相信,用计算机的朋友都听过进程这个概念.打开电脑的任务管理器,我们就可以看到许多进程.它们主要分为三类, ...
随机推荐
- python实例:爬取caoliu图片,同时下载到指定的文件夹内
本脚本主要实现爬取caoliu某图片板块,前3页当天更新的帖子的所有图片,同时把图片下载到对应帖子名创建的文件夹中 爬虫主要通过python xpath来实现,同时脚本内包含,创建文件夹,分割数据,下 ...
- iOS深色模式媒体查询css
@media (prefers-color-scheme: dark) { body { background-color: #000; color: #fff; } }
- 做个小实验,帮你理解 Git 工作区与暂存区
做个小实验,帮你理解 Git 工作区与暂存区 Git 很重要,本文将通过实验的方式,带你理解 Git 的工作区.暂存区以及相关命令的使用. 1. 什么是工作区和暂存区? 在 Git 中,工作区和暂存区 ...
- php uninx时间戳转datetime对象,获取n秒前的dateime问题
当时在网上搜了下这个问题,大多方法都是定义一个函数,在里面处理,后来网官网文档看到可以这么用,记录下. php时间戳转datetime对象 var_dump(new \Datetime('@'.tim ...
- 【题解】洛谷P731[NOI1999] 生日蛋糕+数据加强版
前言:阅读理解+剪枝+头脑风暴 Designed By FrankWkd 遵循GNU GPL2.0开源协议. 该代码可以通过T148457 生日蛋糕加强版 和 P1731 [NOI1999] 生日蛋糕 ...
- CF1627B题解
Not Sitting 题面翻译 Rahul 和 Tina 在玩一个游戏.游戏在一个 n×mn\times mn×m 的网格图上进行,记第 rrr 行第 ccc 列上的格子为 (r,c)(r,c)(r ...
- Multisim14.0安装包免费获取,超详细中文安装步骤助你快速上手!
Multisim14.0简介 Multisim14.0是由美国国家仪器公司(NI)推出的专业电子设计自动化](EDA)工具,广泛应用于电路设计.仿真验证.教学实验及科研开发领域.其核心功能是通过虚拟仿 ...
- 【记录】SMB|Windows下修改SMB端口并挂载
环境:Window11 使用背景:勒索病毒导致445端口不安全,故而该端口在服务器端被全面禁用了,如需使用SMB服务需要换个SMB服务端口. 方法1:端口转发 win+x点开管理员权限的终端: 输入如 ...
- 线程安全集合 --- Concurrent
引言 最近看一些代码的时候,发现有人用 System.Collections.Concurrent 下的 BlockingCollection 很便利的实现了生产者 - 消费者模式,这是之前没有注意到 ...
- C++基础——引用和指针篇
一.指针(Pointer) 定义: 指针是一个变量,用于存储另一个变量的地址. 基本用法: #include <iostream> using namespace std; int mai ...