我越到了一个for循环的逻辑问题。我现在想在for循环里面执行一个线程,而线程里面又有一个执行的程序,我想当线程里面的程序执行完成以后,再循环下一次,如for(int i=0;i<10;i++)循环执行完程序后i+1。
------解决方案--------------------
做一个任务类 创建一个集合,集合添加任务进去,没执行一个任务,集合删除当前任务。
------解决方案--------------------
final Object object=new Object();
for (int i = 0; i < 7; i++){
synchronized (object){
new Thread(){
public void run(){
synchronized (object){
try{
sleep(100);
}catch (InterruptedException e){
e.printStackTrace();
}
System.out.println(System.currentTimeMillis()+"aaaaa");
object.notifyAll();
}
}
}.start();
object.wait();
System.out.println(System.currentTimeMillis()+"bbbbb");
}
}
------解决方案--------------------
方法解读:
1、全局变量:这种方法简单,但这种风格容易使全局变量泛滥。像这种局变的同步,可以不用提升到全局的层面上。但这种方法的确是实现起来最快的啊~~~双刃剑
2、做一个任务类:这种方法条理清晰,结构严谨,缺点是代码会比较多。。
以上两个方法都无法实现线程局部存储,这是上面两点共同的缺点
3、启动线程,使用局部变量同步:这种方法的缺点是控制流复杂。优点就是可以使用线程局部存储,或者调用已经写好,不好修改,要求以线程方式启用的模块。
以上都是用的Java的线程同步机制
具体实现需依项目实际选择。
------解决方案--------------------