`
miaoge
  • 浏览: 107554 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类

【多线程】做一个放号器, 多个线程同时申请号码不重复.

阅读更多

这题关键代码:synchronized(temp)  //同步锁锁定号码集合temp

import java.util.ArrayList;
import java.util.List;

/**
 * @author $KangMiao$
 * 做一个放号器, 多个线程同时申请号码不重复. 
 * 比如: 线程1 : 1, 4, 5,… 线程2 : 2, 3, 7… 线程2 :6,8,9...
 */
public class ApplyNum implements Runnable {
	private Integer index;
	private List<Integer> temp;
	//初始化一个集合 用来放1-100的号码
	{
	    temp = new ArrayList<Integer>();
		for (int i = 1; i <= 100; i++) {
			temp.add(i);
		}
	}

	public void run() {
	   while(temp.size()!=0){
		   synchronized(temp){   //同步锁锁定号码集合temp
			 if(temp.size()!=0){  //防止前面等待当前线程解锁的线程 因为号码器为空而报异常
				int leng = temp.size();
				index = (int) (Math.random() * leng);   //随机获得一个 集合的索引值
				System.out.println(Thread.currentThread().getName() + "申请的号码为:"
						+ temp.get(index));             //打印出索引值对应的号码
				temp.remove(temp.get(index));           //删除被申请过的号码
			  }else
				   System.out.println(Thread.currentThread().getName() +"号码已经取完!");
		   }
		}
	}

	public static void main(String[] args) {
		//实例化一个 与实例化多个对象 效果完全不一样,多个又重新分配多个号码集合
		ApplyNum ay1 = new ApplyNum();
//		ApplyNum ay2 = new ApplyNum();
		new Thread(ay1).start();
		new Thread(ay1).start();
		new Thread(ay1).start();
		new Thread(ay1).start();
		new Thread(ay1).start();
		new Thread(ay1).start();
		new Thread(ay1).start();
	}
}

 

分享到:
评论

相关推荐

    最新版鱼刺类.多线程6.ec模块

    最新版鱼刺类.多线程6.ec模块

    Java多线程.ppt

    Java多线程.pptJava多线程.pptJava多线程.pptJava多线程.pptJava多线程.pptJava多线程.pptvJava多线程.pptJava多线程.pptJava多线程.pptJava多线程.ppt

    多线程启动.java多线程启动.java多线程启动.java

    多线程启动.java多线程启动.java多线程启动.java多线程启动.java

    大漠实现多绑定窗口多线程同时进行.e

    大漠车间 多线程范例 大漠实现多绑定窗口多线程同时进行

    基于SpringBoot和POI实现单线程和多线程导出Excel.zip

    基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip基于SpringBoot和POI实现单线程和多线程导出Excel.zip...

    Linux系统下的多线程编程入门.pdf

    Linux系统下的多线程编程入门.pdf Linux系统下的多线程编程入门.pdf Linux系统下的多线程编程入门.pdf Linux系统下的多线程编程入门.pdf Linux系统下的多线程编程入门.pdf Linux系统下的多线程编程入门.pdf Linux...

    C++_p2p实现多线程文件传输.doc

    C++_p2p实现多线程文件传输.docC++_p2p实现多线程文件传输.docC++_p2p实现多线程文件传输.docC++_p2p实现多线程文件传输.docC++_p2p实现多线程文件传输.docC++_p2p实现多线程文件传输.docC++_p2p实现多线程文件传输....

    VB.NET可以很容易实现多文件多线程同时下载

    用VB6折腾了很久,很难实现多文件同时下载,虽然也说VB6支持异步操作,但是不能真正的多个文件同时下载,也就是说实现不了真正意义上的多线程同时工作,用Inet控件观察了好久,总是一个一个的下载。无奈之下,只好...

    密探ftp,多线程ftp.zip

    密探ftp,多线程ftp.zip密探ftp,多线程ftp.zip密探ftp,多线程ftp.zip密探ftp,多线程ftp.zip密探ftp,多线程ftp.zip密探ftp,多线程ftp.zip密探ftp,多线程ftp.zip密探ftp,多线程ftp.zip密探ftp,多线程ftp.zip...

    zhaoguolei1024#AutoJsExample#多线程.js1

    # 多线程.js//线程暂停//线程停止//定义一个线程//线程开始执行//等待线程执行完闭。

    C#多线程互斥实例 多线程获取同一变量

    C#多线程互斥实例 多线程获取同一变量(不重复)。是一个很好的学习例子

    多线程多线程.zip

    该文档是笔者在学习李刚老师《Java疯狂讲义》中有关多线程的用法而总结出来的笔记,其中主要的内容包括线程创建和启动、线程的生命周期、控制线程、线程同步、线程通信线程池等基本内容。对Java多线程有详细的介绍。...

    Win32多线程程序设计.pdf(带目录)

    Win32多线程程序设计.pdf(带目录)Win32多线程程序设计.pdf(带目录)Win32多线程程序设计.pdf(带目录)Win32多线程程序设计.pdf(带目录)Win32多线程程序设计.pdf(带目录)Win32多线程程序设计.pdf(带目录)...

    [『辅助』] 易编远航第一期-六套大漠多线程中级进阶视频教程

    使用同步器作为多线程中级教材,主要是对上一套初级教程做一个简单的总结, 并且对接下来脚本的线程处理,及监控线程起到一个较高的实际认知。 对多线程基 础及后续多线程课程有承前启后的作用 主要学习内容: 1....

    线程编程 四个线程...

    用JAVA写一个多线程程序,如写四个线程,二个加1,二个对一个变量减一,输出

    java多线程作业.docx

    虽然执行线程给人一种几个事件同时发生的感觉,但这只是一种错觉,因为我们的计算机在任何给定的时刻只能执行那些线程中的一个。为了建立这些线程正在同步执行的感觉,Java虚拟机快速地把控制从一个线程切换到另一个...

    Qt中利用OpenCV2.4.4多线程打开多摄像机

    模拟了一个16个摄像机的场景,有不开多线程和打开多线程的对比。 可以明显感觉到打开多线程后主界面不卡了。 只是个多线程的小例子,还有很多不足之处,有待各位完善。 注意:pro文件中的include和lib文件目录需要...

    Python多线程编程.zip

    Python多线程编程.zipPython多线程编程.zipPython多线程编程.zipPython多线程编程.zipPython多线程编程.zipPython多线程编程.zipPython多线程编程.zipPython多线程编程.zipPython多线程编程.zip 运行python的时候,...

    深入浅出 Java 多线程.pdf

    深入浅出 Java 多线程.pdf

    c#编写串口通讯代码 多线程实现.rar_C#串口_c# 串口多线程_c#多线程_串口多线程_串口通信

    串口通信的实现,编程环境为C#,实现技术采用了多线程方式

Global site tag (gtag.js) - Google Analytics