java如何让指定的线程先执行!并不是先执行完毕!

来源:百度知道 编辑:UC知道 时间:2024/07/02 00:57:41
class TestThread1 extends Thread
{
int i;
public TestThread1()
{
i = 0;
}
public void run()
{
while(true)
{
i++;
try
{
sleep(1000);
}
catch(Exception e)
{
e.printStackTrace();
}
if(i == 50)
break;
System.out.println("i = " + i);
}

}
}

class TestThread2 extends Thread
{
int j;
public TestThread2()
{
j = 0;
}

public void run()
{
while(true)
{
j++;
System.out.println("TestThead2 run() called!");
if(j == 10)
break;
}
}
}

public class Test
{
public static void main(String[] args)
{
TestThread1 t1 = new Test

怎么说呢,实际上线程的管理是由操作系统控制的,当前正在运行的线程和下一个要运行的线程都是由操作系统快定程序并不能控制。但我们可以通过很多其它的方式控制程序的执行方式从而达到控制线程的目的。如设置优先级,使用sleep等方法。
但在这里,这些都不能完全达到你要的效果,既使有又只是一定概率出现的,并不是完全的让t1先执行,像1楼说的可能这sleep几毫秒t1已经结束完了。
我认为应该用信程间通信的方式解决,你可以在TestThread1的run()方法的while循环里加一个notifyAll();,在TestThread2的run()方法下while循环前加一个wait();,这么做的程序运行过程是:
1,如果是t1先执行的话那就没话说了,符合你的要求,只是在t2第一次获得执行机会时他会进入等待状态(即wait)当t1执行一次while循环时,会唤醒t2(即notifyAll())。这样t2也就可以再次执行而且不再进入wait状态。
2,如果是t2先执行的话因为第一句就是wait()所以t2直接等待,即让出CPU给t1,当t1进入循环后执行到notifyAll()时又会唤醒t2,这样t2就相当于后于t1执行而不一定要等t1执行完成了才执行,这就取快于你的系统了。
这是线程间的通信问题,你可以看看相关的资料

t1.start();在这后面让主线程sleep几毫秒试试。。

设置优先级啊 你已经达到效果了啊