问题描述
- 关于Java多线程的问题
-
有两个类,一个主类,一个线程类。我主类里面有一个变量,需要线程类去处理。有什么办法保证我的线程类里面处理完之后 主类再使用这个变量么?
简化的例子:
主类public class A { public static List<String> items = new ArrayList<String>(); public static void main(String[] args){ for(int time = 0; time < 3; time++){ new B().start(); } for(int i = 0; i<items.size();i++){ System.out.print(items.get(i) + "n"); } }
}
线程类
public class B extends Thread{ @Override public void run(){ //比较复杂的数据处理 for(int i = 0; i < 5; i++) { A.items.add("" + i); } }
}
请问要怎么保证所有的线程都跑完,再使用主类变量?当然不要去停线程。谢谢。
解决方案
CountDownLatch 可以实现
简单点来讲可以设置一个信号量,主线程不断监测这个信号量,不满足条件就一直阻塞,直到满足条件。信号量在多线程中修改
解决方案二:
线程同步,加上同步锁
解决方案三:
线程同步与线程协作问题 http://zhangxin357.com/articles/10002.html
http://zhangxin357.com/articles/10003.html
时间: 2024-11-17 14:47:39