怎么保证线程按照顺序来做呢??请具体示范,不要侃侃而谈
本人愚钝,没人深入教过我线程,webproject中也没应用过。主要自己看资料,也许我的想法纯属伪命题,麻烦指正,请勿见怪、窃笑。用手头两个例子例1:(我稍微改了一下)/...
本人愚钝,没人深入教过我线程,web project中也没应用过。
主要自己看资料,也许我的想法纯属伪命题,麻烦指正,请勿见怪、窃笑。
用手头两个例子
例1:(我稍微改了一下)
//通过继承Thread类来创建线程类
public class FirstThread extends Thread
{
private int i ;
//重写run方法,run方法的方法体就是线程执行体
public void run(){
for ( ; i < 100 ; i++ )
{
//当线程类继承Thread类时,可以直接调用getName()方法来返回当前线程的名。
//如果想获取当前线程,直接使用this即可
//Thread对象的getName返回当前该线程的名字
System.out.println(getName() + " " + i);
}
}
public static void main(String[] args)
{
for (int i = 0; i < 100; i++)
{
//调用Thread的currentThread方法获取当前线程
System.out.println(Thread.currentThread().getName() + " " + i);
if (i == 20)
{
//创建、并启动第二条线程
Thread th2=new FirstThread();
th2.setName("第2个线程");
th2.start();
//创建、并启动第三条线程
Thread th3=new FirstThread();
th3.setName("第3个线程");
th3.start();
}
}
//第四个线程...
FirstThread th4=new FirstThread();
th4.setName("第4个进程");
th4.start();
}
}
运行后,由于底层平台控制,执行顺序有随行性。但是我需要的是按照想要的顺序执行!
(想实现的照顺序:开始main线程→当i 为20时,开始:做完th0线程→做完th1线程→继续做main线程→做完th4线程)
sleep()/yield()这些方法都是让线程“歇菜”而已,好像不能帮助实现上面的顺序
尝试run()方法里面添加同步监视器(FirstThread被监视)synchronized (this){}
,不能实现
尝试run()方法添加修饰synchronized,变成同步方法,不能实现,而且线程run()方法好像不能成为同步方法。
到底怎么写,才能按照我想要的顺序来执行呢??难道只要是线程,就根本没办法做到有序,而只能不确定、并发,难道这就是表现了所谓线程之间无法互相干预。
另外一个例子另外提出问题,这里补充链接,不想要问太多,免得你们不耐烦了。 展开
主要自己看资料,也许我的想法纯属伪命题,麻烦指正,请勿见怪、窃笑。
用手头两个例子
例1:(我稍微改了一下)
//通过继承Thread类来创建线程类
public class FirstThread extends Thread
{
private int i ;
//重写run方法,run方法的方法体就是线程执行体
public void run(){
for ( ; i < 100 ; i++ )
{
//当线程类继承Thread类时,可以直接调用getName()方法来返回当前线程的名。
//如果想获取当前线程,直接使用this即可
//Thread对象的getName返回当前该线程的名字
System.out.println(getName() + " " + i);
}
}
public static void main(String[] args)
{
for (int i = 0; i < 100; i++)
{
//调用Thread的currentThread方法获取当前线程
System.out.println(Thread.currentThread().getName() + " " + i);
if (i == 20)
{
//创建、并启动第二条线程
Thread th2=new FirstThread();
th2.setName("第2个线程");
th2.start();
//创建、并启动第三条线程
Thread th3=new FirstThread();
th3.setName("第3个线程");
th3.start();
}
}
//第四个线程...
FirstThread th4=new FirstThread();
th4.setName("第4个进程");
th4.start();
}
}
运行后,由于底层平台控制,执行顺序有随行性。但是我需要的是按照想要的顺序执行!
(想实现的照顺序:开始main线程→当i 为20时,开始:做完th0线程→做完th1线程→继续做main线程→做完th4线程)
sleep()/yield()这些方法都是让线程“歇菜”而已,好像不能帮助实现上面的顺序
尝试run()方法里面添加同步监视器(FirstThread被监视)synchronized (this){}
,不能实现
尝试run()方法添加修饰synchronized,变成同步方法,不能实现,而且线程run()方法好像不能成为同步方法。
到底怎么写,才能按照我想要的顺序来执行呢??难道只要是线程,就根本没办法做到有序,而只能不确定、并发,难道这就是表现了所谓线程之间无法互相干预。
另外一个例子另外提出问题,这里补充链接,不想要问太多,免得你们不耐烦了。 展开
2013-09-02
展开全部
synchronized
在不同实例中的方法,使用是没有效果的。
你可以用int step=0; 来判断当前在纯闹歼第几做冲个线程,当前线程执行完,step++,再执行别弯慧的线程。别的线程先等待。
如第1 个线程判断step==0时执行、第2个线程判断step==1执行、……………………
在不同实例中的方法,使用是没有效果的。
你可以用int step=0; 来判断当前在纯闹歼第几做冲个线程,当前线程执行完,step++,再执行别弯慧的线程。别的线程先等待。
如第1 个线程判断step==0时执行、第2个线程判断step==1执行、……………………
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询