这题关键代码: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 多线程编程是 Java 编程语言中一个非常重要的概念,它允许程序同时执行多个任务,以提高程序的执行效率和响应速度。在本文中,我们将深入浅出Java多线程编程的世界,探索多线程...
最新版鱼刺类.多线程6.ec模块
Java多线程.pptJava多线程.pptJava多线程.pptJava多线程.pptJava多线程.pptJava多线程.pptvJava多线程.pptJava多线程.pptJava多线程.pptJava多线程.ppt
多线程是指在一个进程中可以同时执行多个不同的线程。每个线程都有自己的执行路径,它们共享进程的内存空间,但各自拥有独立的执行栈。在易语言中,通过创建和管理线程,可以实现并发执行任务,提高程序的运行效率。...
3. **竞态条件**:当两个或多个线程同时访问并修改共享资源时,如果没有适当的同步措施,可能导致数据的不一致性,这就是竞态条件。 4. **互斥**:互斥是一种确保任何时候只有一个线程能访问共享资源的技术。在C#中...
大漠车间 多线程范例 大漠实现多绑定窗口多线程同时进行
在标题"socket 一个服务器对应多个客户端使用多线程"中,提到的是使用Socket编程来设计一个服务器,该服务器能够同时处理来自多个客户端的连接请求,这通常被称为“一对一”或“一对多”模型。在Linux环境下,这种...
标题"idea调试多线程.zip"所涉及的主题正是如何有效地在多线程环境中运用IDE的调试工具。这里我们将深入探讨如何在IntelliJ IDEA中进行多线程调试,特别是如何针对特定线程设置断点。 首先,让我们理解多线程的基本...
写入锁是指当一个线程申请写入锁时,其他线程不能写入或读取共享资源。阅读锁是指当一个线程申请阅读锁时,其他线程可以读取共享资源,但不能写入。 在C#语言中,可以使用Mutex类和Semaphore类来实现锁机制。Mutex...
在多线程环境中,如果多个线程同时读写同一变量,可能会引发数据不一致性和竞态条件。为了防止这种情况,我们需要一种机制来同步线程,确保同一时间只有一个线程可以访问该变量。 Qt提供了一个名为QMutex的类,它是...
本主题聚焦于如何使用Python的Selenium与Chrome浏览器进行多开和多线程操作,结合phantomjs和chromedriver这两个关键组件来实现。首先,让我们详细了解一下这些概念。 1. **Selenium**: Selenium是一个强大的Web...
在VB(Visual Basic)编程中,多线程是一种常见的技术,用于提高程序的执行效率,尤其是在处理大量数据或需要同时进行多个任务时。本主题主要关注如何在VB中实现多线程以及如何传递多个参数。 首先,理解多线程的...
在多线程环境下,防止同一段代码被多个线程重复执行,通常采用互斥锁(Mutex)或信号量(Semaphore)等同步机制。互斥锁确保同一时间只有一个线程可以访问受保护的代码区域,而信号量则可以控制同时访问特定资源的...
在IT行业中,多线程技术是一项关键的编程概念,它允许程序同时执行多个任务,显著提高了效率和响应性。在Delphi这样的集成开发环境中,利用多线程进行批量下载是常见的应用场景,尤其对于处理大量数据或者大文件下载...
模拟了一个16个摄像机的场景,有不开多线程和打开多线程的对比。 可以明显感觉到打开多线程后主界面不卡了。 只是个多线程的小例子,还有很多不足之处,有待各位完善。 注意:pro文件中的include和lib文件目录需要...
1. **多线程基础**:多线程是指一个应用程序中同时执行多个线程(即任务)的能力。这种并发执行可以提高系统资源的利用率,提升程序的响应速度和执行效率,特别是在多核处理器系统中表现尤为明显。 2. **线程的创建...
在压缩包文件“多线程.Q”中,很可能包含了一个或多个人工编写的具体多线程按键精灵脚本示例,可能包括线程的创建、线程间通信、线程同步等内容。通过学习和分析这些示例,我们可以更好地掌握在按键精灵中应用多线程...
C#语言开发多线程Socket服务器端程序,实现一个服务器同时与多个客户端连接对话。这里,我们将详细讲解如何使用C#语言开发多线程Socket服务器端程序,实现一个服务器同时与多个客户端连接对话。 多线程Socket服务器...
1. 数据竞争:当多个线程访问同一块数据且没有适当的同步机制时,可能会导致数据不一致。 2. 死锁:两个或多个线程互相等待对方释放资源,形成僵局。 3. 活锁:线程不断尝试但无法取得进展,类似于死锁但线程未停止...
否则,多个线程同时访问数据库可能导致数据损坏或不一致。C#中的`lock`关键字是一种同步机制,可以防止多个线程同时访问共享资源。 4. **同步锁**:在描述中提到的“同步锁”是解决并发问题的关键。C#中的锁机制,...