package thread.test;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicInteger;
public class ThreadTest implements Runnable
{
public static void main(String[] args)
{
for (int i = 0; i < sfThreadNum; i++)
{
new Thread(new ThreadTest()).start();
;
}
try
{
sfAllTaskLatch.await();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
/*for (int num : set)
{
System.out.println(num);
}
System.out.println("大小" + set.size());*/
}
@Override
public void run()
{
// mStartIndex = safe.getAndIncrement();
//以原子的方式实现加1
mStartIndex = sTaskIndex.getAndIncrement();
synchronized (set)
{
set.add(mStartIndex);
}
try
{
Thread.sleep(1000);
System.out.printf("线程%3d启动!!!", mStartIndex);
System.out.println();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
finally
{
sfAllTaskLatch.countDown();
}
}
static final int sfThreadNum = 100;
// static ThreadSafe safe = new ThreadSafe(sfThreadNum);
//线程安全的类,使用非阻塞的算法实现并发控制
static AtomicInteger sTaskIndex = new AtomicInteger(0);
//
int mStartIndex;
// int Index;
static Set<Integer> set = new TreeSet<Integer>();
//CountDownLatch,同步工具类,使主线程等待所有子线程运行完毕,在继续执行
static CountDownLatch sfAllTaskLatch = new CountDownLatch(sfThreadNum);
}
AtomicInteger、CountDownLatch并发编程
最新推荐文章于 2024-04-13 22:19:38 发布