首页 > 编程语言 >java CountDownLatch 实例

java CountDownLatch 实例

时间:2023-04-20 18:08:43浏览次数:35  
标签:java util concurrent 实例 CountDownLatch import public


一个线程等待

CountDownLatch使用其await()等待其他线程完成(使用减值为0来判断是否完成)。

是一个线程等待多个线程(1-N)的锁工具。

以下为实例代码:

 

package com.common;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class CountdownLatchTest extends Thread {

	public final int countThd = 10;
	public CountDownLatch latch = new CountDownLatch(countThd);
	
	public static void main(String[] args)
	{
		CountdownLatchTest one = new CountdownLatchTest();
		one.start();
		System.out.println("^^^^^^^^mainmianmian^^^^^^^^^");
	}
	
	public void run()
	{
		synchronized (this) {
			try {
				System.out.println("GoGoGoGoGoGoGoTOWork");
				//Executor executor = Executors.newCachedThreadPool();
				for(int i=0;i<this.countThd;i++)
				{
					ChildrenThread childt = new ChildrenThread(this.latch,i);
					Thread each = new Thread(childt);
					each.start();
					//executor.execute(childt);
				}
				latch.await();
				System.out.println("GoGoGoGoGoGoGoHomeNow");
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		//workForever();
	}
	public void workForever()
	{
		
		
	}
	
	class ChildrenThread implements Runnable
	{
		CountDownLatch latch;
		int num;
		public ChildrenThread(CountDownLatch latch,int num)
		{
			this.latch = latch;
			this.num = num;
		}

		@Override
		public void run() {
			// TODO Auto-generated method stub
			try {
				System.out.println("**********have a rest  "+num);
				Thread.sleep(1000);
				System.out.println("----------go back to work  "+num);
				latch.countDown();
				//CountdownLatchTest.this.latch.countDown();
				//System.out.println("%%%%%%%%%%I want to go home");
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}
}

 讲述的是一个实习小弟只能等其他员工都改完活才能回家的故事 

标签:java,util,concurrent,实例,CountDownLatch,import,public
From: https://blog.51cto.com/u_2465818/6210088

相关文章

  • 关于Java中对象的向上转型和向下转型
    什么是多态?同一个类调用同一个方法会产生不同的影响/结果这就是多态publicclassPet{ publicvoideat(){ System.out.println("Peteat...") }}classDogextendsPet{ publicvoideat(){ System.out.pringln("Dogeat...") } publicvoidrun(){ System.ou......
  • day 07 7.1 前端基础之JavaScript基础【一】
    前端基础之JavaScript基础【一】【1】、JavaScript的历史1992年底,美国国家超级电脑应用中心(NCSA)开始开发一个独立的浏览器,叫做Mosaic。这是人类历史上第一个浏览器,从此网页可以在图形界面的窗口浏览。但是该浏览器还没有面向大众的普通用户。1994年10月,NCSA的一个主要......
  • day 08 8.2 前端基础之JavaScript基础【三】
    前端基础之JavaScript基础【三】【1】、jQuery介绍jQuery是什么jQuery是一个快速、简洁的JavaScript框架。jQuery设计的宗旨是“writeLess,DoMore”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件......
  • day 08 8.1 前端基础之JavaScript基础【二】
    前端基础之JavaScript基础【二】【1】、json序列化和反序列化JSON:JavaScript对象表示法,是一种轻量级的数据交换格式。易于人阅读和编写。//json是一种数据格式,语法一般是{}或者[]包含起来//内部成员以英文逗号隔开,最后一个成员不能使用逗号!//可以是键值对,也可以是列......
  • 每日八股文之Java
    1、如何利用Redis实现一个分布式锁?为什么要实现分布式锁、实现分布式锁的方式理论+实操:158、缓存-分布式锁-分布式锁原理与使用哔哩哔哩bilibili实现分布式锁的方式:方案一:SETNX+EXPIRE方案二:SETNX+value值是(系统时间+过期时间)方案三:使用Lua脚本(包含SETNX+EXPIRE......
  • 关于Java中方法重载和方法重写
    方法重写是子类继承父类(默认继承Object类)后覆盖父类的方法需要保证同名同参同返回值且访问权限范围不能缩小(public>protected>default>private)publicclassFather{ publicintmethod(){ return-1; }}classSonextendsFather{ //访问范围不能小返回值方法......
  • java-普通内部类和静态内部类区别
    静态内部类相对与外部类是独立存在的,在静态内部类中无法直接访问外部类中的变量、方法。如果要访问的话,必须要new一个外部类的对象,使用new出来的对象来访问。但是可以直接访问静态变量,调用静态的方法。普通内部类作为外部类一个成员而存在,在普通内部类中可以直接访问外部类属性......
  • java创建对象的几种方法
    Java一共有5种方法可以来创建对象例如对象User;使用new的方式来创建对象,newUser(),这种方法使用了构造器2.使用class的newInstance()例如:Useruser=User.class.newInstance();这种方法也使用了构造器3.使用Constructor类的newInstance()方法创建对象,例如:Useruser=......
  • Java多态
    Java多态封装、继承和多态是面向对象的三大特征多态polymorphism许多形态多态体现为父类引用变量可以指向子类对象。多态的定义与使用格式​定义格式:父类类型变量名=new子类类型();多态是同一个行为具有多个不同表现形式或形态的能力实现多态的条件1.继承:必......
  • semaphore简单实例
    semaphore是java里边的信号灯,感觉很像blockqueue,嗯 packagecom.mutiple;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;importjava.util.concurrent.Semaphore;publicclassTestSemaphore{ publicstaticvoidmain(String[]......