使多个线程循环输出0-99-0-99

直接上代码,后面我也有一个问题,关于对象的notifyAll或者notify或者single或者singleAll,唤醒线程是顺序唤醒吗,我这里都是顺序输出了

关于公平与非公平锁的问题?唤醒是公平的???又没有大佬帮助解答!

复制代码
 1 import java.util.concurrent.LinkedBlockingQueue;2 import java.util.concurrent.ThreadPoolExecutor;3 import java.util.concurrent.TimeUnit;4 import java.util.concurrent.locks.Condition;5 import java.util.concurrent.locks.Lock;6 import java.util.concurrent.locks.ReentrantLock;7 8 /**9  * 使用lock对象,使多个线程循环输出0-99-0-99
10  */
11 public class AandBforTOthreadLock {
12     private static Lock lock=new ReentrantLock();
13     private static Condition single=lock.newCondition();
14     static class A implements Runnable{
15         private int i=0;
16         public A(int i){
17             this.i=i;
18         }
19         @Override
20         public void run() {
21             try {
22                 lock.lock();
23                 while (true){
24                     System.out.println(i);
25                     single.await();
26                     single.signal();
27                 }
28             }catch (Exception e){
29                 e.printStackTrace();
30             }finally {
31                 lock.unlock();
32             }
33         }
34     }
35     static class B implements Runnable{
36         @Override
37         public void run() {
38             try {
39                 lock.lock();
40                 while (true){
41                     System.out.println("99");
42                     single.signalAll();
43                     single.await();
44                 }
45             }catch (Exception e){
46                 e.printStackTrace();
47             }finally {
48                 lock.unlock();
49             }
50         }
51     }
52 
53     public static void main(String[] args) throws InterruptedException {
54         ThreadPoolExecutor threadPoolExecutor=new ThreadPoolExecutor(100,100,0L, TimeUnit.MILLISECONDS,
55                 new LinkedBlockingQueue<Runnable>());
56         for (int i=0;i<99;i++){
57             threadPoolExecutor.execute(new A(i));
58             Thread.sleep(3l);
59         }
60         Thread.sleep(10000l);
61         threadPoolExecutor.execute(new B());
62     }
63 
64 }
输出:

……

 

 

转载于:https://www.cnblogs.com/qfxydtk/p/8728840.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

66-Flutter移动电商实战-会员中心_编写ListTile的通用方法

1、界面分析 通过下图我们可以拆分成 4 部分&#xff0c;头部、订单标题区域、订单列表区域、ListTitle同用部分。 2、UI编写 2.1、头部 主要用到了圆形头像裁剪组件-ClipOval 顶部头像区域Widget _topHeader(){ return Container( width: ScreenUtil().setWidth(750), …

Android板实现双屏显示,DisplayManager和Display的使用

非常简单。 效果 1、创建分屏管理类 DisplayController public class DisplayController {public static Display getTargetDisplay() {DisplayManager displayManager (DisplayManager) App.getInstance().getSystemService(Context.DISPLAY_SERVICE);Display[] presentat…

毕业论文管理系统(类图,er图,时序图)

转载于:https://www.cnblogs.com/huahua985/p/8732595.html

67-Flutter中高德地图插件的使用

1、注册和建立高德API应用 高德网站&#xff1a;https://lbs.amap.com/ 控制台-应用管理-创建应用 在创建 Key 2、获得SHA1 进入Flutter项目中的android文件夹内&#xff0c;打开任意一个文件&#xff1a; 比如进入 build.gradle&#xff0c;右上角会有 Open for Editing an…

第八篇Django分页

Django分页 1.复杂版 data []for i in range(1, 302):tmp {"id": i, "name": "alex-{}".format(i)}data.append(tmp)print(data)def user_list(request):# user_list data[0:10]# user_list data[10:20]try:current_page int(request.GET.g…

20179214 《网络攻防实践》第五周学习

20179214 《网络攻防实践》第五周学习 web应用程序体系结构及其安全威胁 web应用程序体系结构 浏览器 标准的web客户端&#xff0c;Web服务器 通常被简单的描述为http守护程序&#xff0c;接受web客户端对资源的请求。Web应用程序 是处于服务器端的业务逻辑&#xff0c;最普遍的…

android studio 4.2.1 下载——安卓12开发

下载地址 &#xff1a;百度网盘 请输入提取码

Python学习——02-Python基础——【9-面向对象进阶】——isinstance(obj,cls)、反射等...

一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 class Foo(object): 2 pass 3 4 obj Foo() 5 6 isinstance(obj, Foo) issubclass(sub, super)检查sub类是否是 super 类的派生类 1 class Foo(object): 2 pa…

工作261:ele-layont布局使用

<!--页面主体布局--> <template><el-container class"layout"><!--头部组件--><el-header class"element-header" style"height: 80px;line-height: 80px"><global-header /></el-header><el-con…

68-Flutter中极光推送的使用

1、申请极光账号和建立应用 极光推送的官方网址为&#xff1a;https://www.jiguang.cn/ 注册好后&#xff0c;进入服务中心,然后再进入开发者平台&#xff0c;点击创建应用。 这时候会出现新页面&#xff0c;让你填写“应用名称”和上传“应用图标”。 创建完成&#xff0c;极…

工作263:弹性布局 修改样式

<div class"container" style"display: flex;flex-direction: column"><!-- <el-radio-group v-model"mode">--><div ><!-- <el-radio-button class"login-btn" label"0">营销端</el…

MongoDB系列四(索引).

一、索引简介 再来老生常谈一番&#xff0c;什么是索引呢&#xff1f;数据库索引与书籍的索引类似。有了索引就不需要翻整本书&#xff0c;数据库可以直接在索引中查找&#xff0c;在索引中找到条目以后&#xff0c;就可以直接跳转到目标文档的位置&#xff0c;这能使查找速度提…

并发编程之多线程线程安全(上)

1、为什么有线程安全问题&#xff1f; 当多个线程共享同一个全局变量或静态变量&#xff0c;做写的操作时&#xff0c;可能会发生数据冲突问题&#xff0c;也就是线程安全问题。但是做读操作是不会发生数据冲突问题。 案例&#xff1a;现在有100张火车票&#xff0c;有两个窗口…

并发编程快速入门

1、线程与进程的区别 进程是所有线程的集合&#xff0c;每一个线程是进程中的一条执行路径。 比方&#xff1a;通过查看 windows 任务管理器中的列表&#xff0c;我们可以把运行在内存中的 exe 文件理解成进程&#xff0c;进程是受操作系统管理的基本运行单元。 2、为什么要…

工作275:表单验证层级添加

<template><!--绑定了一个 控制是否为全屏fullscreen close-on-click-modal 是否通过点击model进行关闭 visible是否显示弹出框 close关闭按钮 --><el-dialog :title"fullTitle" width"80%" :fullscreen"false" :close-on-click-…