多线程运行时有待措置线程?试试看下面介绍的这个批量线程同步体例吧
在一批线程措置轨范中 有时必需等到所有线程全数运行完后 才能进行下一步使命措置 可以采用如 *** 例解决 建树一个锁对象 该锁对象供给一个当前方程期待其他线程的体例 见代码
/**
*
* 此类首要用来措置线程的同步屏障模子 好比 一批线程运行 必需在最后一个线程运行
* 完后 才能进行下一步的 *** 作 那么就可以建树一个锁对象 锁对象供给一个线程期待其他线程
* 的体例 如不美观当前方程运行时 还有未运行的线程 则此线程wait 否则 此线程叫醒其他梗阻的
* 线程 进而最终完成线程的运行
* */
public class LockObject {
private int totalThread =
private int currentThread =
public LockObject(int totalThread) {
this totalThread = totalThread
this currentThread =
}
lishixinzhi/Article/program/Java/gj/201311/11155public class TestThread {
public static void main(String[] args){
Map<Integer, Object>tables = new Hashtable<Integer, Object>()
Thread add = new Thread(new ThreadAdd(tables))
Thread del = new Thread(new ThreadDel(tables))
Thread count = new Thread(new ThreadCount(tables))
//启动线程
add.start()
del.start()
count.start()
}
/**
*添加对象线程
*/
private static class ThreadAdd implements Runnable{
private Map<Integer, Object>table
public ThreadAdd(Map<Integer, Object>tables){
this.table=tables
}
public void run() {
// TODO Auto-generated method stub
for(int i=0i<10i++){
table.put(i, new Object())
System.out.println("添加对象,序号为:"+i)
}
}
}
/**
*删除对象线程
*/
private static class ThreadDel implements Runnable{
private Map<Integer, Object>table
public ThreadDel(Map<Integer, Object>table){
this.table=table
}
public void run() {
// TODO Auto-generated method stub
for(int i=0i<10i++){
try {
Thread.sleep(100)
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
table.remove(i)
System.out.println("移除对象,序号为:"+i)
}
}
}
/**
*统计线程
*/
private static class ThreadCount implements Runnable{
private Map<Integer, Object>table
public ThreadCount(Map<Integer, Object>table){
this.table=table
}
public void run() {
// TODO Auto-generated method stub
for(int i=0i<10i++){
try {
Thread.sleep(50)
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
System.out.println("当前队列还剩"+table.size()+"个对象")
}
}
}
}
这是我的写的demo,不知道符合不符合你的意思,大家共同交流共同进步。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)