如何使用Java实现多线程切换等待唤醒交替打印奇偶数
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,这篇文章给大家分享的是有关如何使用Java实现多线程切换等待唤醒交替打印奇偶数的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。引言在日常工作生活中,可能会有用时几个人或是很多
千家信息网最后更新 2024年09月22日如何使用Java实现多线程切换等待唤醒交替打印奇偶数
这篇文章给大家分享的是有关如何使用Java实现多线程切换等待唤醒交替打印奇偶数的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
引言
在日常工作生活中,可能会有用时几个人或是很多人干同一件事,在java编程中,同样也会出现类似的情况,多个线程干同样一个活儿,比如火车站买票系统不能多个人买一到的是同一张票,当某个窗口(线程)在卖某一张票的时候,别的窗口(线程)不允许再卖此张票了,在此过程中涉及到一个锁和资源等待的问题,如何合理正确的让线程与线程在干同一件事的过程中,不会抢资源以及一个一直等待一个一直干活的状况,接下来就聊一下多线程的等待唤醒以及切换的过程,在此就以A和B两个线程交替打印奇偶数的例子为例,代码如下:
package com.svse.thread;import java.util.concurrent.atomic.AtomicInteger;/** * 交替打印奇偶数*功能说明: *@author:zsq *create date:2019年5月27日 下午4:34:30 *修改人 修改时间 修改描述* *Copyright (c)2019北京智华天成科技有限公司-版权所有*/public class AlternatePrinting { //让两个线程使用同一把锁。交替执行 。 //判断是不是奇数 如果是奇数进入奇数线程执行打印并加一。然后线程释放锁资源。然后让该线程等待 //判断是不是偶数,如果是偶数进入偶数线程执行打印并加一。然后线程释放锁资源。然后让该线程等待 public static AtomicInteger atomicInteger =new AtomicInteger(1); public static void main(String[] args) { Thread a=new Thread(new AThread()); Thread b=new Thread(new BThread()); a.start(); b.start(); } //奇数线程 public static class AThread implements Runnable{ public void run() { while(true){ synchronized (atomicInteger) { if(atomicInteger.intValue()%2 !=0){ System.out.println("奇数线程:" + atomicInteger.intValue()); try { Thread.sleep(500); } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } atomicInteger.getAndIncrement(); // 以原子方式将当前值加 1。 // 奇数线程释放锁资源 atomicInteger.notify();//执行完操作后释放锁并进入等待 try { atomicInteger.wait(); } catch (InterruptedException e) { e.printStackTrace(); } }else{ // 奇数线程等待 try { atomicInteger.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } } //偶数线程 public static class BThread implements Runnable{ public void run() { while(true){ synchronized (atomicInteger) { if(atomicInteger.intValue()%2 ==0){ System.out.println("偶数线程:"+ atomicInteger.intValue()); try { Thread.sleep(500); } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } atomicInteger.getAndIncrement(); // 以原子方式将当前值加 1。 // 偶数线程释放锁资源 atomicInteger.notify();//执行完操作后释放锁并进入等待 try { atomicInteger.wait(); } catch (InterruptedException e) { e.printStackTrace(); } }else{ try { // 偶数线程等待 atomicInteger.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } }}
感谢各位的阅读!关于"如何使用Java实现多线程切换等待唤醒交替打印奇偶数"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
线程
偶数
奇数
资源
奇偶
奇偶数
切换
过程
两个
内容
原子
多个
方式
更多
篇文章
加一
不错
实用
接下来
个人
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库系统有哪些名词解释
数据库单表查询有哪些问题
廊坊师范大专网络技术专业
网安保数据库安全解决方案
无线互联网科技是核心期刊
普通搭建矿机服务器
网络安全法》系列解读
sql数据库日志满了会怎样
网络安全open是什么意思
单位网络安全宣传教育情况
宁波玖萌互联网科技有限公司
云服务器和云数据库
山西智能软件开发服务至上
瑞庭网络技术审核专员
舰少数据库btd毁灭者
整万数数据库
装了手机卡显示无法连接服务器
怪物火车无法联系服务器
从数据库中随机取数据库
南阳川光五防的数据库密码是多少
信息系统集成能做软件开发吗
任天堂紧急维护服务器
自学网络安全工程
软件开发去哪里接活
英雄联盟服务器排队
海外服务器评测
南通德丹网络技术
软件开发的经营管理
数据库表间关系有几种
镇海软件开发外包