java程序在主线程中判断各个子线程状态的操作

每个子线程在队列为空时会wait等待其他线程添加新url到队列,到最后所有子线程都取不到url时也会都wait住,要在主线程中判断如果所有的子线程都是wait状态的话,则终止子线程并退出,该如何判断?下面主线程中我用if判断执行时主线程会被子线程在某一时刻抢走出现错误的wait判断(也就是判断时恰好是等其他线程的wait,这个时刻并不是所有子线程都wait了)吗?

//子线程中:

public void run() {

while(true)

{

String visitingUrl = (String) getAUrl(); //从队列中同步的取一条url

if(visitingUrl==null){                              //队列为空

synchronized(signal){                 //等待其他线程向队列中添加新url的信号

try {

signal.wait();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

......

......

}

}

//主线程中:

//监控线程队列里的每个线程的状态

while(flag){

......

if(threadsList.get(0).getState().equals("WAITING")

&& threadsList.get(1).getState().equals("WAITING")

&& threadsList.get(2).getState().equals("WAITING")){        ——1

flag=false;

}else{

Thread.sleep(2000);

}

......

}

——1 这个地方会不会出现没判断完小括号里语句的就跳转到子线程了?那不就有可能出错了吗,我查了下有说不是原子操作的话就可能会出错,那我这样写正确吗,怎么实现原子操作,如何达到准确判断的要求?

------解决方案--------------------

引用:Quote: 引用:把你的思路换一下。

wait是可以超时的,你可以变成子线程在等3*10秒之后取不到URL就超时。

然后你只需要在wait这里判断一下就可以了。

那是在wait(30000)括号里加时间?可是时间到了自动就醒了又重新循环了啊,怎么确定是自己醒的还是被唤醒的呢,还是不太明白你说的,应该在哪里判断?给个例子最好了

要判断是外面notify还是超时,其实也很简单。

如果是外面的notify,那至少会有两个现像:

1. wait前后的时间差应该<30000

2. 应该有足够让你继续工作下去的条件,如拿到url .

按此两个规则,随便找一个去判断即可。

每个java程序都至少有一个线程给主线程,java程序在主线程中判断各个子线程状态的操作,该如何解决...相关推荐

  1. 线程退出【Linux学习】pthread_create主线程与创建的新线程之间退出关系

    本篇文章个人在青岛吃饭的时候突然想到的...最近就有想写几篇关于线程退出的文章,所以回家到之后就奋笔疾书的写出来发布了 我们在一个线程中经常会创立另外的新线程,如果主线程退出,会不会影响它所创立的新线 ...

  2. C语言:记录在主线程中停止子线程

    主线程中创建一个子线程如代码: #include <stdio.h> #include <pthread.h> #include <unistd.h> #inclu ...

  3. java定义一个类显示没有_Java 中的每个类都至少有一个构造方法,一个类中如果没有定义构造方法,系统会自动为这个类创建一个默认的构造方法。_学小易找答案...

    [单选题]关于 Java 语言叙述错误的是( ). [判断题]类中 static 修饰的变量或方法,可以使用类名或对象的引用变量访问. [命名题]命名下列化合物, [单选题]急性胰腺炎的主要临床表现是 ...

  4. 汇编中的.section命令及汇编语言程序都至少声明的3个段

    汇编语言中最重要的命令之一是.section命令.这个命令定义内存段,汇编语言程序在其中定义元素.所有汇编语言程序都至少具有3个必须声明的段落: ·数据段 ·bss段 ·文本段 数据段用于声明为程序存 ...

  5. java中子线程与主线程通信_Android笔记(三十二) Android中线程之间的通信(四)主线程给子线程发送消息...

    之前的例子都是我们在子线程(WorkerThread)当中处理并发送消息,然后在主线程(UI线程)中获取消息并修改UI,那么可以不可以在由主线程发送消息,子线程接收呢?我们按照之前的思路写一下代码: ...

  6. python线程的注意点(线程之间执行是无序的、主线程会等待所有的子线程执行结束再结束(守护主线程)、线程之间共享全局变量、线程之间共享全局变量数据出现错误问题(线程等待(join)、互斥锁))

    1. 线程的注意点介绍 线程之间执行是无序的 主线程会等待所有的子线程执行结束再结束 线程之间共享全局变量 线程之间共享全局变量数据出现错误问题 2. 线程之间执行是无序的 import thread ...

  7. 主线程是如何向子线程传递数据的?_c++ 利用thread创建线程

    用进行多线程开发 小时候,老师总是教育我们上课要专心,"一心不可二用".可是CPU这个不听话的"熊孩子"偏偏却在一个芯片中加入了两个甚至多个运算核心,想要一&q ...

  8. 面试官:如何让主线程等待所有的子线程执行结束之后再执行

    java 主线程等待所有子线程执行完毕在执行,在工作总往往会遇到异步去执行某段逻辑, 然后先处理其他事情, 处理完后再把那段逻辑的处理结果进行汇总(比如用户下单一个产品,后台会做一系列的处理,为了提高 ...

  9. UnityThread子线程使用只能在主线程中调用的函数或Unity API

    Unity的Socket网络编程中,为了防止程序卡死,一般使用多线程来监听端口,当收到来自客户端的消息时,需要显示在界面上.但是如果直接在子线程中操作Unity的界面或物体会报错.国外一个大神写了一个 ...

最新文章

  1. bzoj3223 splay
  2. Linux学习之Vim编辑器
  3. java中如何将非整数保留到小数点后指定的位数
  4. mysql调优的一些方面
  5. [蓝桥杯2017决赛]分考场、OpenJudge:分成互质数
  6. CodeForces1477D Nezzar and Hidden Permutations(构造+调整+菊花图)
  7. ubuntu安装谷歌浏览器 typora+出现编码错误‘ascii‘ codec can‘t encode character ‘\u6b66‘+docker里安装tensorrt报错
  8. Zookeeper集群搭建(涵盖命令详解)与Error contacting service. It is probably not running的问题解决
  9. python2.7.5 怎么装redis_python中Redis的简要介绍以及Redis的安装,配置
  10. pthreads v3下的worker和pool的使用
  11. 交警计算机系统审计,公安移动警务审计及考核系统
  12. GIS招聘 | 青海省省直事业单位(含地信、测绘等专业)
  13. Linux中巧用zip命令压缩和解压缩文件
  14. 光学红外雨量IFR202型传感器智慧检测雨量场景等行业
  15. Makefile 书写
  16. 线性回归相关知识及公式推导
  17. 股票实现自动止损止盈 股票自动止损止盈策略 python量化策略
  18. SpringCloud 微服务注册中心 Eureka - Server
  19. android接入微信API相关细节
  20. 数据架构与数据库建模

热门文章

  1. 王木匠,我服了你一半
  2. react学习笔记(二)编写第一个react组件
  3. 20145129 课程总结
  4. android studio使用问题——instant run
  5. 【unity】简要分析yield及协同程序的用法
  6. TrackMouseEvent介绍
  7. WPF中获取鼠标相对于屏幕的位置
  8. 【许晓笛】 EOS智能合约案例解析(1)
  9. Java多个jdk安装切换
  10. EasyPHP-Devserver-17的坑位