yiled()方法,指线程1让步后,它把机会让给了同等优先级的线程,由操作系统选择接下来要执行的线程,可能是线程1,也可能是其他线程。线程1的状态转换如下:
Runnng --> Runable(就绪状态)
sleep(),指让线程1休息给定的时间。只要休息的时间够长,且有其他线程已经处于就绪状态,那么接下来要执行的线程肯定不会是线程1。线程1的状态转换如下:
Running --> Blocked(阻塞状态) --> Runnable(就绪状态)
一.执行yiled()方法
public class Two_Thread implements Runnable {
public static void main(String[] args) {
// TODO Auto-generated method stub
Two_Thread R = new Two_Thread();
for(int i=0;i<3;i++){
Thread t1 = new Thread(R);
t1.start(); //通过start()方法启动线程
}
//System.out.println(Thread.currentThread().getName()+" back to main");
}
@Override
public void run() {
// TODO Auto-generated method stub
increate();
}
private void increate() {
// TODO Auto-generated method stub
for(int i=0;i<5;i++){
System.out.println(Thread.currentThread().getName()+" i = "+i);
Thread.yield();
}
}
}
打印出来的其中一种log:
Thread-0 i = 0
Thread-2 i = 0
Thread-1 i = 0
Thread-2 i = 1
Thread-0 i = 1
Thread-2 i = 2
Thread-1 i = 1
Thread-2 i = 3
Thread-0 i = 2
Thread-2 i = 4
Thread-1 i = 2
Thread-1 i = 3
Thread-1 i = 4
Thread-0 i = 3
Thread-0 i = 4
由log我们可以看出,运行了线程Thread-1( 即打印i=2),然后让步,接下来还是运行线程Thread-1 (即打印i=3)。
Thread-1 i = 2
Thread-1 i = 3
Thread-1 i = 4
二.执行sleep()方法
public class Two_Thread implements Runnable {
public static void main(String[] args) {
// TODO Auto-generated method stub
Two_Thread R = new Two_Thread();
for(int i=0;i<3;i++){
Thread t1 = new Thread(R);
t1.start(); //通过start()方法启动线程
}
//System.out.println(Thread.currentThread().getName()+" back to main");
}
@Override
public void run() {
// TODO Auto-generated method stub
increate();
}
private void increate() {
// TODO Auto-generated method stub
for(int i=0;i<5;i++){
System.out.println(Thread.currentThread().getName()+" i = "+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
打印出来的log是: 其中i的值肯定是 000 111 222 333 444
Thread-0 i = 0
Thread-1 i = 0
Thread-2 i = 0
Thread-0 i = 1
Thread-1 i = 1
Thread-2 i = 1
Thread-0 i = 2
Thread-1 i = 2
Thread-2 i = 2
Thread-0 i = 3
Thread-2 i = 3
Thread-1 i = 3
Thread-0 i = 4
Thread-2 i = 4
Thread-1 i = 4
由log我们可以看出,运行了线程Thread-1,只要休眠时间够长且有其他线程就绪,接下来肯定不会再运行线程Thread-1