每个java程序都至少有一个线程给主线程,java程序在主线程中判断各个子线程状态的操作,该如何解决...
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程序在主线程中判断各个子线程状态的操作,该如何解决...相关推荐
- 线程退出【Linux学习】pthread_create主线程与创建的新线程之间退出关系
本篇文章个人在青岛吃饭的时候突然想到的...最近就有想写几篇关于线程退出的文章,所以回家到之后就奋笔疾书的写出来发布了 我们在一个线程中经常会创立另外的新线程,如果主线程退出,会不会影响它所创立的新线 ...
- C语言:记录在主线程中停止子线程
主线程中创建一个子线程如代码: #include <stdio.h> #include <pthread.h> #include <unistd.h> #inclu ...
- java定义一个类显示没有_Java 中的每个类都至少有一个构造方法,一个类中如果没有定义构造方法,系统会自动为这个类创建一个默认的构造方法。_学小易找答案...
[单选题]关于 Java 语言叙述错误的是( ). [判断题]类中 static 修饰的变量或方法,可以使用类名或对象的引用变量访问. [命名题]命名下列化合物, [单选题]急性胰腺炎的主要临床表现是 ...
- 汇编中的.section命令及汇编语言程序都至少声明的3个段
汇编语言中最重要的命令之一是.section命令.这个命令定义内存段,汇编语言程序在其中定义元素.所有汇编语言程序都至少具有3个必须声明的段落: ·数据段 ·bss段 ·文本段 数据段用于声明为程序存 ...
- java中子线程与主线程通信_Android笔记(三十二) Android中线程之间的通信(四)主线程给子线程发送消息...
之前的例子都是我们在子线程(WorkerThread)当中处理并发送消息,然后在主线程(UI线程)中获取消息并修改UI,那么可以不可以在由主线程发送消息,子线程接收呢?我们按照之前的思路写一下代码: ...
- python线程的注意点(线程之间执行是无序的、主线程会等待所有的子线程执行结束再结束(守护主线程)、线程之间共享全局变量、线程之间共享全局变量数据出现错误问题(线程等待(join)、互斥锁))
1. 线程的注意点介绍 线程之间执行是无序的 主线程会等待所有的子线程执行结束再结束 线程之间共享全局变量 线程之间共享全局变量数据出现错误问题 2. 线程之间执行是无序的 import thread ...
- 主线程是如何向子线程传递数据的?_c++ 利用thread创建线程
用进行多线程开发 小时候,老师总是教育我们上课要专心,"一心不可二用".可是CPU这个不听话的"熊孩子"偏偏却在一个芯片中加入了两个甚至多个运算核心,想要一&q ...
- 面试官:如何让主线程等待所有的子线程执行结束之后再执行
java 主线程等待所有子线程执行完毕在执行,在工作总往往会遇到异步去执行某段逻辑, 然后先处理其他事情, 处理完后再把那段逻辑的处理结果进行汇总(比如用户下单一个产品,后台会做一系列的处理,为了提高 ...
- UnityThread子线程使用只能在主线程中调用的函数或Unity API
Unity的Socket网络编程中,为了防止程序卡死,一般使用多线程来监听端口,当收到来自客户端的消息时,需要显示在界面上.但是如果直接在子线程中操作Unity的界面或物体会报错.国外一个大神写了一个 ...
最新文章
- bzoj3223 splay
- Linux学习之Vim编辑器
- java中如何将非整数保留到小数点后指定的位数
- mysql调优的一些方面
- [蓝桥杯2017决赛]分考场、OpenJudge:分成互质数
- CodeForces1477D Nezzar and Hidden Permutations(构造+调整+菊花图)
- ubuntu安装谷歌浏览器 typora+出现编码错误‘ascii‘ codec can‘t encode character ‘\u6b66‘+docker里安装tensorrt报错
- Zookeeper集群搭建(涵盖命令详解)与Error contacting service. It is probably not running的问题解决
- python2.7.5 怎么装redis_python中Redis的简要介绍以及Redis的安装,配置
- pthreads v3下的worker和pool的使用
- 交警计算机系统审计,公安移动警务审计及考核系统
- GIS招聘 | 青海省省直事业单位(含地信、测绘等专业)
- Linux中巧用zip命令压缩和解压缩文件
- 光学红外雨量IFR202型传感器智慧检测雨量场景等行业
- Makefile 书写
- 线性回归相关知识及公式推导
- 股票实现自动止损止盈 股票自动止损止盈策略 python量化策略
- SpringCloud 微服务注册中心 Eureka - Server
- android接入微信API相关细节
- 数据架构与数据库建模