- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在学习 Java 线程的基础知识,我正在尝试编写一个程序来模拟 2 个团队的 2x200 接力赛。我想要有 2 个团队(每个团队由一个 ThreadGroup 代表),每个团队有 2 名成员,每个成员必须运行 200 m。这里只是通过for循环和打印来模拟运行。我无法找到串行运行线程组中的线程
的直接方法这是 worker 的样子
public class RelayRunner implements Runnable {
@Override
public void run() {
for (int i = 1; i <= 200; i++) {
String name = Thread.currentThread().getName();
if (i % 50 == 0) {
System.out.format("%s ran %d m \n", name, i);
}
}
}
}
这是主程序的样子
public class RelayRunnerMatch {
public static void main(String[] args) {
RelayRunner relayRunner = new RelayRunner();
ThreadGroup usa = new ThreadGroup("USA");
ThreadGroup germany = new ThreadGroup("GERMANY");
Thread usa1 = new Thread(usa, relayRunner, "usa1");
Thread germany1 = new Thread(germany, relayRunner, "germany1");
Thread usa2 = new Thread(usa, relayRunner, "usa2");
Thread germany2 = new Thread(germany, relayRunner, "germany2");
usa1.start();
germany1.start();
/* Now I would like to start the second thread in a group only if the first
thread in the same group has finished like in a real relay race. How??
*/
//usa1.join(); germany1.join();
//usa2.start(); germany2.start() --> Not good, usa2 must start immediately when usa1 has finished
}
}
我看不出 join() 在这里有什么帮助,因为它将等待两个线程完成,然后第二组运行者才能开始运行。我还意识到 activeCount() 只是一个估计,所以我也不确定是否使用它。有没有可能的解决方案,而无需求助于新的 Concurrent API 中的服务(因为我还没有进一步实现)?
最佳答案
public class Player1 implements Runnable{
private final CountDownLatch countDownLatch;
private final String s;
public Player1(CountDownLatch c, String s){
this.countDownLatch=c;
this.s=s;
}
@Override
public void run() {
for(int i=0;i<200;i++){
System.out.println(s+":"+i);
}
countDownLatch.countDown();
}
}
public class Player2 implements Runnable{
private final CountDownLatch countDownLatch;
private final String s;
public Player2(CountDownLatch c, String s){
this.countDownLatch = c;
this.s=s;
}
@Override
public void run() {
try {
countDownLatch.await();
} catch (InterruptedException ex) {
Logger.getLogger(Player2.class.getName()).log(Level.SEVERE, null, ex);
}
for(int i=0;i<200;i++){
System.out.println(s+":"+i);
}
}
}
驱动程序:
public static void main(String[] args){
Thread[] grp1 = new Thread[2];
Thread[] grp2 = new Thread[2];
CountDownLatch c1 = new CountDownLatch(1);
CountDownLatch c2 = new CountDownLatch(1);
grp1[0]=new Thread(new Player1(c1, "grp1:player1"));
grp1[1]=new Thread(new Player2(c2, "grp1:player2"));
grp2[0]=new Thread(new Player1(c2, "grp2:player1"));
grp2[1]=new Thread(new Player2(c2, "grp2:player2"));
grp1[0].start();
grp2[0].start();
grp1[1].start();
grp2[1].start();
}
关于java - 在Java中串行执行Threadgroup中的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20286657/
一 点睛 线程可以设置为守护线程,ThreadGroup 也可以设置为守护 ThreadGroup,但是若将一个 ThreadGroup 设置为 deamon,也并不会影响线程的 daemon 属性,
一 基本操作 public int activeCount():用于获取 group 中活跃的线程,这只是估计值,并不能百分百地保证数字一定正确。 public int activeGroupCoun
一 点睛 destroy 用于销毁 ThreadGroup,该方法只是针对一个没有任何 active 线程的 group 进行一次 destroy 标记,调用该方法的直接结果是在父 group 中将自
一 点睛 ThreadGroup 复制线程组的两个方法。 public int enumerate(ThreadGroup list[]) // 相对于 enumerate(list,true) pu
一 点睛 interrupt 一个 thread group 会导致该 group 中所有 active 线程全部 interrupt,也就是说该 group 中每一个线程的中断标识都被设置了。 二
1.概述 转载:线程组是什么?线程优先级如何设置? 2. 线程组(ThreadGroup) Java中用ThreadGroup来表示线程组,我们可以使用线程组对线程进行批量控制。 ThreadGrou
我知道当前使用 Executors 而不是 ThreadGroup 的做法: 处理线程的一般首选方式 从线程等中捕获异常... 但是,ThreadGroup 的固有缺陷 本身是什么(我听到了对该类的含
我有一些漂亮的样板 Java 代码,它使用 tg.getParent() 执行 while 循环来获取根线程组。它已经在四种不同的环境(一个 Windows 和三个 Linux)上运行了几个月。最近,
当我运行 pmd 检查时,我的代码出现避免线程组错误,但我不明白为什么。谁能给我解释一下吗? Timestamp currentTimestamp = new java.sql.Timestamp(C
ThreadGroup#activeCount() 的文档说:返回此线程组及其子组中 Activity 线程数量的估计值。 该计数是否包括处于 sleep 、 wait 和 join 模式的线程,还是
我正在学习多线程的概念,我试图找到数组中 Activity 线程的数量,但是 ThreadGroup.activeCount() 的方法> 仅返回零值。 这是代码: 线程对象类:- class th1
我开始为 Java 中已经存在的项目(非多线程项目)开发一些多线程平台,我需要性能增益,减少整个项目中复杂计算的时间。 我一直在使用 Executors,但我真的不知道与 ThreadGroup 或纯
Java 编程语言使用ThreadGroup 来管理线程之间的访问权限: A thread group represents a set of threads. In addition, a thre
我正在寻找最佳实践,并且正在将 PMD 应用到我的 Java EE 项目中,但一条规则表明我必须避免使用 java.lang.ThreadGroup,而我现在正在使用它。 规则说这是不安全的,我想知道
我已经为生产者和消费者实现了一个信号量类。 它工作正常,但我现在感觉我们使用 notifyAll 来通知唤醒的线程或通知所有线程。 我想知道是否有任何方法可以只通知一组特定的组:比如生产者只通知消费者
这个问题与我在 Java 并发主题中的作业有关。我的任务是生成新线程并通过给定的 concurrencyFactor 限制它们。也就是说,继续分派(dispatch)新线程,直到 Activity 线
Thread.activeCount() 和 ThreadGroup.activeCount() 有什么区别? oracle java 文档说这两种方法都会返回组(包括子组)中的估计线程数。当我得到列
我使用的是用于批处理的 ThreadPoolExecutor,但单个 JVM 上的单个线程池仅使用可用服务器的 CPU 之一。如果使用新线程池启动并行的第二个 JVM,我将使用另一个 CPU。 所以我
不使用任何令人讨厌的反射。有什么快速/简单的方法来做到这一点(无需复制和粘贴计时器代码)? 最佳答案 不要使用定时器,尝试ScheduledExecutorService反而。合并调用 Executo
java.lang.Thread 类有一个构造函数,它仅接受一个字符串参数作为线程名称。它有一个仅接受 Runnable 目标的构造函数。但它也有一个默认构造函数。这意味着名称或可运行目标不是强制性的
我是一名优秀的程序员,十分优秀!