-
多线程并发5
实现的功能如下, 相约一起去烧烤:可能其中一方先到,另一方后到。 两个都到了之后,才一起去。
使用 java.util.concurrent.CountDownLatch 怎么保证两个线程同时到了,注意,这里有一个身份的判断,两个是之前相约的两个人?
如果是,两个共同的CountDownLatch分别调用countDown()方法,最后 await()等待确认两个都到了,才一起去。
这里关键怎么处理身份判断 和 两个人一个countDownlatch 这个要怎么处理?
问题补充:OpenMind 写道你是不是想干下面的事情啊?public class Person extends Thread { static Random random = new Random(); private String name; private CountDownLatch cdl; public Person(String name, CountDownLatch cdl) { super(); this.name = name; this.cdl = cdl; } public void walk() { try { // 每个人行走的时间随机,0-5秒 Thread.sleep(Math.abs(random.nextInt() % 5000)); } catch (InterruptedException e) { // ignore } } private void await() { cdl.countDown(); try { cdl.await();// 如果有人每到,一直到所有人到了以后在继续 } catch (InterruptedException e) { } } public void 烧烤() { System.out.println(name + " starting 烧烤"); try { Thread.sleep(1000); } catch (InterruptedException e) { // ignore } } public void run() { // 走一段时间 walk(); // 等等看还有没有人每到, await(); // 烧烤(); } public static void main(String[] args) { int personCount = 10; CountDownLatch cdl = new CountDownLatch(10); for (int i = 0; i < personCount; i++) { new Person("men " + i, cdl).start(); } } }
你这个这样处理我知道,关键是 来到你面前的很多人,你怎么判断他是你的伙伴,两个人共用一个CountDownLatch或者其他的线程并发处理类来处理这个逻辑。2012年2月15日 10:12
2个答案 按时间排序 按投票排序
-
你是不是想干下面的事情啊?
public class Person extends Thread { static Random random = new Random(); private String name; private CountDownLatch cdl; public Person(String name, CountDownLatch cdl) { super(); this.name = name; this.cdl = cdl; } public void walk() { try { // 每个人行走的时间随机,0-5秒 Thread.sleep(Math.abs(random.nextInt() % 5000)); } catch (InterruptedException e) { // ignore } } private void await() { cdl.countDown(); try { cdl.await();// 如果有人每到,一直到所有人到了以后在继续 } catch (InterruptedException e) { } } public void 烧烤() { System.out.println(name + " starting 烧烤"); try { Thread.sleep(1000); } catch (InterruptedException e) { // ignore } } public void run() { // 走一段时间 walk(); // 等等看还有没有人每到, await(); // 烧烤(); } public static void main(String[] args) { int personCount = 10; CountDownLatch cdl = new CountDownLatch(10); for (int i = 0; i < personCount; i++) { new Person("men " + i, cdl).start(); } } }
2012年2月15日 15:17
-
可以先为两人包装成一个组, 如 (伪码描述)
class Team {
CountDownLatch cdl = new CountDownLatch(2); // 这个组共同的countDownlatch
People p;// 这个组先到的那个人
}
然后用一个List记录所有已经到了一个人的组
List waitingTeams = [];
当一个人到的时候,遍历这个List 判断有没有同组人在等自己
如果没有: 说明自己是先到的, 建一个新的team并放到List里, 然后等待队友
如果有: 将team从List里删除, 然后唤醒队友, 继续
-----
其实我觉得应该用CyclicBarrier2012年2月15日 12:52
相关推荐
在Java编程中,多线程并发是提升程序执行效率、充分利用多核处理器资源的重要手段。本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多线程并发概念及其应用。 首先,我们要了解Java中的线程。线程是...
"基于Qt的多线程并发服务器"是一个典型的解决方案,它利用了Qt库的强大功能,特别是其对多线程的支持,来处理来自多个客户端的并发请求。下面我们将深入探讨这个主题。 首先,Qt是一个跨平台的应用程序开发框架,...
标题"WEBAPI多线程并发测试工具"指出,这是一个专门针对Web API进行多线程并发测试的工具。Web API通常指的是应用程序接口,它们允许不同的服务之间进行通信,以实现数据交换和功能整合。多线程并发测试则是验证在多...
在编程领域,多线程并发处理是一种常见的优化技术,它能充分利用多核处理器的资源,提高程序的执行效率。在给定的标题“多线程并发处理的简单实现”中,我们可以深入探讨如何构建这样的系统。 首先,多线程并发处理...
在现代软件开发中,多线程并发技术是提高程序性能和响应速度的关键因素之一。随着计算机硬件的性能持续提升,程序也必须能够有效地利用多核处理器来实现真正的并行处理。JVM(Java虚拟机)作为Java应用程序的运行...
在IT行业中,模拟摄像头与多线程并发处理是两个重要的技术领域,特别是在视频通信和网络编程中。本文将深入探讨“模拟摄像头libuv支持多线程并发”这一主题,结合“模拟IPC”这一标签,以及文件名称“IpcSimulate”...
在处理大量图像或需要快速响应时间的应用场景中,多线程并发识别可以显著提升效率。以下将详细介绍如何利用Tesseract OCR实现多线程并发识别,以及可能涉及的相关技术点。 首先,理解Tesseract OCR的基本工作原理是...
"Linux下基于socket多线程并发通信的实现" 本文主要探讨Linux操作系统下基于socket多线程并发通信的实现。 socket是UNIX系统开发中的网络通信接口,可以对台计算机之间的通信规范进行合理定义,从而达到通信的目的...
### Java多线程并发知识点详解 #### 一、Java多线程并发简介 在现代软件开发中,特别是在Java这样的主流编程语言中,多线程并发技术是提高程序执行效率、优化资源利用的关键手段之一。本篇文章将深入探讨Java中的...
在IT行业中,多线程并发处理数据是一种常见的优化策略,特别是在大数据处理、网络服务和分布式系统中。通过并发,可以充分利用多核处理器的计算能力,提高程序执行效率,缩短任务的总体完成时间。本篇文章将深入探讨...
在IT领域,多线程并发服务器是网络编程中的一个重要概念,尤其在高并发场景下,如网站、在线游戏和实时数据处理系统等。这个毕业设计的主题是“多线程并发服务器”,采用C++语言实现,这表明我们将在讨论中涵盖C++...
但同时,多线程并发也会引入一些问题,如数据竞争和同步问题。 为了解决这些问题,Java提供了多种同步机制。`synchronized`关键字用于控制对共享资源的访问,确保同一时间只有一个线程可以执行特定代码块,从而避免...
"支持多线程并发与消息异步处理的Linux Netlink通信机制研究" Linux操作系统中,Netlink是一种流行的进程间通信机制,用于实现用户空间和内核空间之间的通信。然而,在多线程程序中使用Netlink时,仍然存在一些问题...
本项目聚焦于使用Java的Socket进行多线程并发控制,并结合Hibernate ORM框架与MySQL数据库进行数据存储。下面将详细阐述这些技术及其应用。 首先,Java Socket是Java提供的用于实现网络上不同计算机间进程通信的...
在JDK5中,Java引入了一套强大的多线程并发库,极大地提升了多线程编程的效率和安全性。这个库提供了丰富的类和接口,使得开发者能够更好地控制线程的执行、同步和通信。 1. **线程** - **线程与进程的关系**:...
多线程并发从,学习笔记,代码+注释,从线程创建开始到多线程并发,相关锁以及一些设计模式等
java多线程并发编程知识导图笔记.xmind
多线程并发代码的调试方法详解 在多线程并发编程中,调试是一件很复杂的事情,特别是在使用 IntelliJ IDEA 等集成开发环境时。今天,我们将详细介绍如何在 IntelliJ IDEA 中调试多线程并发代码。 在多线程并发编程...
该资源是多线程并发下的单例模式-源码,几乎包含了所有方式实现的单例模式,并且能够确保在多线程并发下的线程安全性。 读者可结合本人博客 http://blog.csdn.net/cselmu9?viewmode=list 中的《线程并发之单例模式...
java多线程并发控制[参照].pdf