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多线程(下)
首先介绍可见性.原子性.有序性.重排序这几个概念 原子性:即一个操作或多个操作要么全部执行并且执行的过程不会被任何因素打断,要么都不执行. 可见性:一个线程对共享变量值的修改,能够及时地被其它线程看到 ...
随机推荐
- nsq源码分析
nsq的源码比较简单,值得一读,特别是golang开发人员,下面重点介绍nsqd,看完这篇文章希望你能对消息队列的原理和实现有一定的了解. nsqd是一个守护进程,负责接收,排队,投递消息给客户端,并 ...
- HDU-4725 The Shortest Path in Nya Graph (拆点+dji)
HDU 4725 The Shortest Path in Nya Graph : http://acm.hdu.edu.cn/showproblem.php?pid=4725 题意: 在一个图中跑最 ...
- Codeforces Round #480 (Div. 2) C - Posterized
题目地址:http://codeforces.com/contest/980/problem/C 官方题解: 题解:一共256个像素网格,可以把这个256个分组,每个分组大小<=k.给出n个像素 ...
- CodeForces 834D The Bakery
The Bakery 题意:将N个数分成K块, 每块的价值为不同数字的个数, 现在求总价值最大. 题解:dp[i][j] 表示 长度为j 且分成 i 块的价值总和. 那么 dp[i][j] = max ...
- 杭电第四场 hdu6336 Problem E. Matrix from Arrays 打表找规律 矩阵前缀和(模板)
Problem E. Matrix from Arrays Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 ...
- android CTS 介绍
[转]http://blog.csdn.net/pugongying1988/article/details/6976091 一.为什么需要兼容性测试(以下称CTS)? 1.1.让APP提供更好的用户 ...
- Django + Gunicorn + Nginx 部署之路
前言 最近,我已经成功将我的个人网站从 Flask 迁移到 Django 了,最早接触 Django 的时候大概是在 4 年前,我记得那个时候 Django 中的路由配置使用 正则 来进行的,但是我有 ...
- python爬虫-模拟微博登录
微博模拟登录 这是本次爬取的网址:https://weibo.com/ 一.请求分析 找到登录的位置,填写用户名密码进行登录操作 看看这次请求响应的数据是什么 这是响应得到的数据,保存下来 exect ...
- java读取Excel —— XSSFWorkbook 找不到该类
- kubernetes集群部署高可用Postgresql的Stolon方案
目录 前言 ....前言 本文选用Stolon的方式搭建Postgresql高可用方案,主要为Harbor提供高可用数据库,Harbor搭建可查看kubernetes搭建Harbor无坑及Harbor ...