java 开启多线程里面如何加条件判断执行其他逻辑?
发布网友
发布时间:2022-04-29 22:32
我来回答
共1个回答
热心网友
时间:2022-06-24 15:47
package test; import java.util.concurrent.CountDownLatch;import java.util.concurrent.Executor;import java.util.concurrent.Executors; public class WatchThread { public void testThread() throws InterruptedException {int threadNum = 10;// 初始化countDownCountDownLatch threadSignal = new CountDownLatch(threadNum);// 创建固定长度的线程池Executor executor = Executors.newFixedThreadPool(threadNum);for (int i = 0; i < threadNum; i++) { // 开threadNum个线程Runnable task = new TestThread(threadSignal);// 执行executor.execute(task);}threadSignal.await(); // 等待所有子线程执行完// do workSystem.out.println(Thread.currentThread().getName() + "");} /*** 测试函数*/public static void main(String[] args) throws InterruptedException {WatchThread test = new WatchThread();test.testThread();} private class TestThread implements Runnable {private CountDownLatch threadsSignal; public TestThread(CountDownLatch threadsSignal) {this.threadsSignal = threadsSignal;} public void run() {System.out.println(Thread.currentThread().getName() + "开始...");// do shomethingSystem.out.println("开始了线程::::" + threadsSignal.getCount());// 线程结束时计数器减1threadsSignal.countDown();System.out.println(Thread.currentThread().getName() + "结束. 还有"+ threadsSignal.getCount() + " 个线程");}} }
Java 多线程中,我如何让开着的多线程执行完一批任务后 在继续执行另一...
设置一个计数器,每个线程执行完后计数器加一然后查看计数器是否已满(任务都完成),没有的话就阻塞,是的话就唤醒其他所有线程,大家一起来执行下一次任务。要注意公用的计数器的线程安全!
Java多线程之ThreadPoolExecutor原理(图文代码实例详解)
privatebooleanaddWorker(RunnablefirstTask,booleancore){retry:for(;;){intc=ctl.get();intrs=runStateOf(c);//Checkifqueueemptyonlyifnecessary.if(rs>=SHUTDOWN&&//第一个条件:线程至少不是运行状态,那么就是shutdownstoptidying,terminated状态!(rs==SHUTDOWN&&firstTask==null&&!workQueue.isEmpty()))//第...
如何判断java多线程是否全部执行完了,并计
1: 创建线程池 ExecutorService cachedThreadPool 2: 开启一个线程 cachedThreadPool.execute(new Runnable() {//做任务})3.: 判断线程池里面是否执行完, cachedThreadPool.isTerminated()while (true) { if (cachedThreadPool.isTerminated()) { // 计算耗时 long time = System.currentTime...
JAVA项目中哪些场景需要用到多线程,深感迷茫,请使用过的高手指点。_百...
场景一:一个业务逻辑有很多次的循环,每次循环之间没有影响,比如验证1万条url路径是否存在,正常情况要循环1万次,逐个去验证每一条URL,这样效率会很低,假设验证一条需要1分钟,总共就需要1万分钟,有点恐怖。这时可以用多线程,将1万条URL分成50等份,开50个线程,没个线程只需验证200条,这样所...
条件变量和信号量的区别
条件变量 条件变量使在多线程程序中用来实现“等待--->唤醒”逻辑常用的方法,是进程间同步的一种机制。条件变量用来阻塞一个线程,直到条件满足被触发为止,通常情况下条件变量和互斥量同时使用。一般条件变量有两个状态:①一个/多个线程为等待"条件变量的条件成立"而挂起;②另一个线程在"条件变量条件...
java中,多线程中,有没有可能当一个线程执行一半时候,另一个线程又开始...
在旧的单处理器系统中,各个线程只是占用处理器的一段时间片,因此不会出现一个线程运行到一半的时候,另一个线程又开始。但是,现在的机器一般都是多处理器系统,实现了真正的并行运行,因此这种情况肯定是会发生的。
java,if else和if else if else区别?
1、if-else是双分支结构 if-else 语句表示"如果条件正确则执行一个操作,否则执行另一个操作"。当条件表达式为真时,执行语句块1,否则,执行语句块2。也就是else部分。代码示例:int a=5;intb=6;if(a>b){ return a;}else{ return b;} 2、if-else if-else是多分支选择结构 if-else if-...
JAVA多线程之ArrayBlockingQueue看Condition的实现
ConditionObject中await实现主要步骤:1.创建一个新建等待节点加入条件等待队列2.释放所有锁(即重置state变量为0)3.判断node是否在CLH双端等待队列中,如果不在则直接LockSupport.park阻塞线程,r然后检查是否中断4.如果CLH的等待队列中,则通过CLH队列中获取锁,5.如果node的nextWaiter不为空,则表示有新的...
JavaNIOReactor网络编程模型的深度理解
每当处理完所有就绪的IO事件后,Reactor线程会再次执行select()操作阻塞等待新的事件就绪并将其分派给对应处理器进行处理。 该模式中,Handler处理时除了read和send调用之外的其他业务逻辑都是多线程执行的,这样就可以让Reactor线程更快的进行下一轮的select操作,提升了对于请求的IO响应速度,不至于因为一些耗时的业务逻辑而...
深入理解Java线程
线程更轻量级,线程的上下文切换成本比进程上下文切换成本低 进程间的通信比较复杂,线程之间的通信比较简单比如共享进程内的内存 进程是操作系统资源分配的最小单位,线程是操作系统线程调度和执行的最小单位,而线程归属于进程 问题: 四种线程同步互斥的控制方法 临界区: 通过对多线程的串行化来访问公共资源或一段代码,速...