`
miaoge
  • 浏览: 109343 次
  • 性别: 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();
	}
}

 

分享到:
评论

相关推荐

    深入浅出 Java 多线程.pdf

    "深入浅出 Java 多线程.pdf" Java 多线程编程是 Java 编程语言中一个非常重要的概念,它允许程序同时执行多个任务,以提高程序的执行效率和响应速度。在本文中,我们将深入浅出Java多线程编程的世界,探索多线程...

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

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

    Java多线程.ppt

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

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

    3. **竞态条件**:当两个或多个线程同时访问并修改共享资源时,如果没有适当的同步措施,可能导致数据的不一致性,这就是竞态条件。 4. **互斥**:互斥是一种确保任何时候只有一个线程能访问共享资源的技术。在C#中...

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

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

    socket 一个服务器对应多个客户端使用多线程

    在标题"socket 一个服务器对应多个客户端使用多线程"中,提到的是使用Socket编程来设计一个服务器,该服务器能够同时处理来自多个客户端的连接请求,这通常被称为“一对一”或“一对多”模型。在Linux环境下,这种...

    idea调试多线程.zip

    标题"idea调试多线程.zip"所涉及的主题正是如何有效地在多线程环境中运用IDE的调试工具。这里我们将深入探讨如何在IntelliJ IDEA中进行多线程调试,特别是如何针对特定线程设置断点。 首先,让我们理解多线程的基本...

    python selenium chrome 多开 多线程

    本主题聚焦于如何使用Python的Selenium与Chrome浏览器进行多开和多线程操作,结合phantomjs和chromedriver这两个关键组件来实现。首先,让我们详细了解一下这些概念。 1. **Selenium**: Selenium是一个强大的Web...

    delphi多线程批量下载

    在IT行业中,多线程技术是一项关键的编程概念,它允许程序同时执行多个任务,显著提高了效率和响应性。在Delphi这样的集成开发环境中,利用多线程进行批量下载是常见的应用场景,尤其对于处理大量数据或者大文件下载...

    Qt 多线程访问同一个变量

    在多线程环境中,如果多个线程同时读写同一变量,可能会引发数据不一致性和竞态条件。为了防止这种情况,我们需要一种机制来同步线程,确保同一时间只有一个线程可以访问该变量。 Qt提供了一个名为QMutex的类,它是...

    Aandroid 多线程断点续传同时下载多个大文件

    在Android开发中,多线程、断点续传和同时下载多个大文件是优化用户体验和提高应用程序性能的关键技术。下面将详细阐述这些知识点,并提供如何实现的指导。 **多线程** 多线程是Android应用中处理耗时操作的重要...

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

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

    多线程_按键精灵经典多线程操作_

    在压缩包文件“多线程.Q”中,很可能包含了一个或多个人工编写的具体多线程按键精灵脚本示例,可能包括线程的创建、线程间通信、线程同步等内容。通过学习和分析这些示例,我们可以更好地掌握在按键精灵中应用多线程...

    c#多线程socket开发(一个服务器对多个客户端)

    C#语言开发多线程Socket服务器端程序,实现一个服务器同时与多个客户端连接对话。这里,我们将详细讲解如何使用C#语言开发多线程Socket服务器端程序,实现一个服务器同时与多个客户端连接对话。 多线程Socket服务器...

    狂神说多线程详解.rar

    1. 数据竞争:当多个线程访问同一块数据且没有适当的同步机制时,可能会导致数据不一致。 2. 死锁:两个或多个线程互相等待对方释放资源,形成僵局。 3. 活锁:线程不断尝试但无法取得进展,类似于死锁但线程未停止...

    C#多线程读写sqlite

    否则,多个线程同时访问数据库可能导致数据损坏或不一致。C#中的`lock`关键字是一种同步机制,可以防止多个线程同时访问共享资源。 4. **同步锁**:在描述中提到的“同步锁”是解决并发问题的关键。C#中的锁机制,...

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

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

    C#多线程编程实例实战.pdf

    写入锁是指当一个线程申请写入锁时,其他线程不能写入或读取共享资源。阅读锁是指当一个线程申请阅读锁时,其他线程可以读取共享资源,但不能写入。 在C#语言中,可以使用Mutex类和Semaphore类来实现锁机制。Mutex...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例),可直接运行

    例如,`Mutex`可以实现全局资源的独占访问,防止多个线程同时访问同一资源。 3. **线程池**:`ThreadPool`是.NET中的一种线程管理机制,它能有效地管理和重用线程,减少线程创建和销毁的开销。通过`ThreadPool....

    C# 高效线程安全,解决多线程写txt日志类.zip

    线程安全是指当多个线程同时访问一个对象或方法时,代码仍然能够正确执行,不会出现数据混乱或者异常的情况。在C#中,实现线程安全通常有几种策略:锁(Lock)、Monitor、Mutex、Semaphore以及线程局部存储...

Global site tag (gtag.js) - Google Analytics