JUC-synchronized练习-交替打印ABC

2024-05-08 04:20

本文主要是介绍JUC-synchronized练习-交替打印ABC,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天来练习一下synchronized

简单来利用synchronized实现一个字符串的交替打印

主要的实现设置一个全局的变量state,线程执行通过不断累加state,根据state对三取余的结果来判断该线程是否继续执行还是进入等待。并通过synchronized锁住一个共享变量lock来进行上锁。

最后创建三个线程并让其进入就绪态。

代码实现:

public class Test {private static final Object lock = new Object();private static volatile int state = 0;public static void main(String[] args) {Thread A = new Thread(new task("a", 0));Thread B = new Thread(new task("b", 1));Thread C = new Thread(new task("c", 2));A.start();B.start();C.start();}static class task implements Runnable {private String s;private int x;public task(String s, int x) {this.s = s;this.x = x;}@Overridepublic void run() {while(true) {synchronized (lock) {while (state % 3 != x) {try {lock.wait();} catch (InterruptedException e) {e.printStackTrace();}}System.out.println(s);state++;lock.notifyAll();}}}}
}

结果展示:结果会一直交替打印abc

这篇关于JUC-synchronized练习-交替打印ABC的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/969293

相关文章

Android Log日志 - 打印不全问题

AndroidStudio在打印Log的时候目前支持4*1024长度,超出部分不能打印。当你在各种百度之后有对应的解决办法,但是每次都是部分代码,看着都忧伤。索性此次项目调试的数据也是比较多滴,目前就准备对Log开刀来写一个Log类,还是如以往的性格直接写完整的类,方便需要的人用。反正又不是什么高深的东西,为了给被方便同时也是给自己方便。 /*** Relin* 2019-07-10 10:40

Android gradle打印依赖的各种姿势

查看Android Gradle 依赖树 1.查看单独模块的依赖 命令行 ./gradlew :模块名:dependencies 例子: ./gradlew :app:dependencies 这个命令会将 gradle 执行的各个步骤全打印出来,包括引用的库,和库中引用的库文件 ./gradlew :app:dependencies --configuration im

atcoder ABC 359-B题详解

atcoder ABC 359-B题详解 Problem Statement There are 2N people standing in a row, and the person at the i-th position from the left is wearing clothes of color Ai. Here, the clothes have N colors from 1

2021-02-16物料档案条码添加和蓝牙条码标签打印,金蝶安卓盘点机PDA,金蝶仓库条码管理WMS系统

物料档案条码添加和蓝牙条码标签打印,金蝶安卓盘点机PDA https://member.bilibili.com/platform/upload-manager/article 本期视频我们来讲解一下汉点机PDA条码添加和条码标签蓝牙便携打印: 在实际使用中,我们商品有两种情况: 一种是商品本身就有条码, 比如:超市卖的可口可乐,牛奶等商品,商品本身就有69开头的国标码,那么我们就可以使用盘点

根据序列:2/1,3/2,5/3,...生成前30项打印出并求和

根据斐波那契数列 def fab(max): def fib_loop_while(max):max = maxa, b = 0, 1while max &

c#:输入5个字符,将其倒序打印出来

using System;using System.Collections.Generic;using System.Linq;using System.Text;//运用所学知识,输入5个字符,将其倒序打印出来namespace ans2{class Program{static void Main(string[] args){string s = Console.Rea

二叉树经典OJ练习

个人主页:C++忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C++忠实粉丝 原创 二叉树经典OJ练习 收录于专栏【数据结构初阶】 本专栏旨在分享学习数据结构学习的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 前置说明  1. 单值二叉树 2. 相同的树 3. 对称二叉树 4. 二叉树的前序遍历 5. 二叉树中序遍历 6. 二叉树的后序遍历 7. 另一

oracle创建一个带参数的存储过程:为指定的员工,涨100块钱的工资;并且打印涨前和涨后的薪水

--创建一个带参数的存储过程--为指定的员工,涨100块钱的工资;并且打印涨前和涨后的薪水/*beginraisesalary(6755);raisesalary(4456);commit();//这里提交,所以说我们一般不会在存储过程或者存储函数中写提交,end;/*/--host cls--先创建表emp和插入数据,显示表的结构用desc 表名--create table empcr

oracle学习之第一个存储过程:打印Hello World

数据库对象:表、视图、索引、序列、同义词、存储过程、存储函数 存储过程:指的是存储在数据库中供所有用户程序调用的子程序叫存储过程、存储函数 存储过程和存储函数的相同点:完成特定功能的程序 存储过程和存储函数的区别:是否用return语句返回值(存储函数可以,但是存储过程不行) --第一个存储过程:打印Hello World/*调用存储过程2种方式:1、exec sayhellow

abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized

1,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized 都不可以,因为abstract申明的方法是要求子类去实现的,abstract只是告诉你有这样一个接口,你要去实现,至于你的具体实现可以是native和synchronized,也可以不是,抽象方法是不关心这些事的,所以写这两个是没有意义的。然后,static方法是不会被覆