Java 多线程练习
class Paper implements Runnable {
boolean bFlag = false;
private int id;
public void setId(int id) {
this.id = id;
}
public int getId() {
return this.id;
}
public String position;
private List<String> listPosCount = new ArrayList<String>();
private HashMap<Integer, int[]> dic = new HashMap<Integer, int[]>();
private List<Integer> myList = new ArrayList<Integer>();
private int[] getNumbers(int size) {
int numbers[] = new int[size];
for (int i = 0; i < size;) {
boolean flag = false;
numbers[i] = (int) (Math.random() * 100);
for (int j = 0; j < i; j++) {
if (numbers[j] == numbers[i]) {
flag = true;
break;
}
}
if (flag == true) {
continue;
}
i++;
}
return numbers;
}
@Override
public void run() {
synchronized (this) {
while (myList.size() < 100) {
while (!bFlag) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.bFlag = false;
if (!myList.contains(id)) {
myList.add(id);
if (position == "qian门" || position == "后门")
listPosCount.add(position);
int nums[] = getNumbers(7);
dic.put(id, nums);
System.out
.println("编号为: " + id + " 的员工 从" + position + " 入场! 拿到的双色球彩票号码是:" + Arrays.toString(nums));
} else {
}
this.notifyAll();
}
int a = 0, b = 0;
for (String str : listPosCount) {
if (str == "后门")
a++;
if (str == "qian门")
b++;
}
System.out.println("从后门入场的员工总共:" + a + " 位员工");
System.out.println("从后门入场的员工总共:" + b + " 位员工");
}
}
}
public class ThreadLearn2 {
public static void main(String[] args) {
Paper p = new Paper();
Thread th1 = new Thread(p);
Thread th2 = new Thread(p);
Runnable run1 = new Runnable() {
@Override
public void run() {
synchronized (p) {
List<Integer> list = new ArrayList<Integer>();
while (list.size() < 100) {
int i = (int) (Math.random() * 100);
if (list.indexOf(i) == -1) {
p.setId(i);
list.add(i);
p.bFlag = true;
int num = (int) (Math.random() * 100) % 2;
if (num == 1) {
p.position = "后门";
} else {
p.position = "qian门";
}
p.notifyAll();
while (p.bFlag) {
try {
p.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
};
Thread th3 = new Thread(run1);
th1.start();
th2.start();
th3.start();
}
}

Java 多线程练习的更多相关文章
- 40个Java多线程问题总结
前言 Java多线程分类中写了21篇多线程的文章,21篇文章的内容很多,个人认为,学习,内容越多.越杂的知识,越需要进行深刻的总结,这样才能记忆深刻,将知识变成自己的.这篇文章主要是对多线程的问题进行 ...
- Java多线程基础知识篇
这篇是Java多线程基本用法的一个总结. 本篇文章会从一下几个方面来说明Java多线程的基本用法: 如何使用多线程 如何得到多线程的一些信息 如何停止线程 如何暂停线程 线程的一些其他用法 所有的代码 ...
- Java多线程系列--“JUC锁”03之 公平锁(一)
概要 本章对“公平锁”的获取锁机制进行介绍(本文的公平锁指的是互斥锁的公平锁),内容包括:基本概念ReentrantLock数据结构参考代码获取公平锁(基于JDK1.7.0_40)一. tryAcqu ...
- Java多线程系列--“JUC锁”04之 公平锁(二)
概要 前面一章,我们学习了“公平锁”获取锁的详细流程:这里,我们再来看看“公平锁”释放锁的过程.内容包括:参考代码释放公平锁(基于JDK1.7.0_40) “公平锁”的获取过程请参考“Java多线程系 ...
- Java多线程--让主线程等待子线程执行完毕
使用Java多线程编程时经常遇到主线程需要等待子线程执行完成以后才能继续执行,那么接下来介绍一种简单的方式使主线程等待. java.util.concurrent.CountDownLatch 使用c ...
- Java多线程 2 线程的生命周期和状态控制
一.线程的生命周期 线程状态转换图: 1.新建状态 用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方法进入就 ...
- java 多线程 1 线程 进程
Java多线程(一).多线程的基本概念和使用 2012-09-10 16:06 5108人阅读 评论(0) 收藏 举报 分类: javaSE综合知识点(14) 版权声明:本文为博主原创文章,未经博 ...
- 一起阅读《Java多线程编程核心技术》
目录 第一章 Java多线程技能 (待续...)
- 第一章 Java多线程技能
1.初步了解"进程"."线程"."多线程" 说到多线程,大多都会联系到"进程"和"线程".那么这两者 ...
- java从基础知识(十)java多线程(下)
首先介绍可见性.原子性.有序性.重排序这几个概念 原子性:即一个操作或多个操作要么全部执行并且执行的过程不会被任何因素打断,要么都不执行. 可见性:一个线程对共享变量值的修改,能够及时地被其它线程看到 ...
随机推荐
- F#周报2019年第35期
新闻 新增强的NuGet搜索 Windows Terminal预览版v0.4发布 在Visual Studio的YouTube频道上获取更多的新内容 .NET团队是如何使用Azure Pipeline ...
- JS核心之DOM操作 上
JS一个重要功能就是操作DOM, 改变页面显示. 目录: 1.基本概念 2.节点类型 3.节点关系 4.节点操作 基本概念 DOM全称为Document Object Model ,即文档对象模型,是 ...
- 前端架构师亲述:前端工程师成长之路的 N 问 及 回答
问题回答者:黄轶,目前就职于 Zoom 公司担任前端架构师,曾就职于滴滴和百度. 1. 前端开发 问题 大佬,能分享下学习路径么,感觉天天忙着开发业务,但是能力好像没有太大提升,不知道该怎么充实自己 ...
- JMeter特点&性能测试工具选型的原则&模拟压力的原理
1.JMeter自身的特点 1)开源.轻量级.更适合自动化和持续集成(100M左右,LoadRunner 4G左右) 2)学习难度大 3)资料少.全英文 2. 性能测试工具选型的原则 1)成本 a.工 ...
- codeforces 779 D. String Game(二分)
题目链接:http://codeforces.com/contest/779/problem/D 题意:给你一段操作序列,按顺序依次删掉字符串1中相应位置的字符,问你最多能按顺序删掉多少个字符,使得s ...
- 淘淘购物系统 (Python)
#首页def tao_first(): t1 = '欢迎进入淘淘购物'.center(110) print(t1) print('~' * 130) t2 = '注册'.center(20) prin ...
- HTML5基本介绍
HTML5简介 HTML是互联网上应用最广泛的标记语言.HTML文件就是普通文本+HTML标记,而不同的HTML标记能表示不同的效果.(简单的说HTML是超文本标记语言) HTML5草案的前身名为 W ...
- 第 14 篇:交流的桥梁“评论功能”——HelloDjango 系列教程
截止到目前为止我们的 django blog 文章展示部分,已经实现的"八九不离十"了.你以为本系列文章就要结束了吗?不能够!新的征程才刚刚开始,HelloDjango 系列文章刚 ...
- mybatis foreach批量处理
---恢复内容开始--- http://blog.csdn.net/jiesa/article/details/52185617 foreach属性 属性 描述 item 循环体中的具体对象.支持属性 ...
- Salesforce LWC学习(七) Navigation & Toast
上一篇我们介绍了针对LWC中常用的LDS的适配的wire service以及@salesforce模块提供的相关的service,其实LWC中还提供其他的好用的service,比如针对导航相关的lig ...