- 1 sleep休眠的意思,特点是在休眠的时候如果有锁是不会释放锁的。
- 2 join例如t.join()意思是,阻塞当前调用线程,直到线程t执行完成。
- 3 yeild意思是让出CPU让其他线程执行。
来分别看一下例子:
sleep:
package com.yuxi;
/**
* 线程休眠的例子
* Created by yuxi on 17/1/27.
*/
public class SleepDemo {
public static void main(String[] args) {
MyThread m = new MyThread();
//加锁之后看如果一个线程进入休眠,是否其他的线程可以拿到这个锁
new Thread(m).start();
new Thread(m).start();
new Thread(m).start();
}
static class MyThread implements Runnable {
public void run() {
synchronized (this) {
try {
System.out.println(Thread.currentThread().getName()+"当前线程休眠。。。" + System.currentTimeMillis());
Thread.sleep(5000);
System.out.println(Thread.currentThread().getName()+"当前线程休眠。。。" + System.currentTimeMillis());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
结果是:
Thread-0当前线程休眠。。。1485488800173
Thread-0当前线程休眠。。。1485488805177
Thread-2当前线程休眠。。。1485488805177
Thread-2当前线程休眠。。。1485488810181
Thread-1当前线程休眠。。。1485488810181
Thread-1当前线程休眠。。。1485488815185
yeild:
package com.yuxi;
/**
* yeild 高风亮节让出cup
* Created by yuxi on 17/1/27.
*/
public class YeildDemo {
public static void main(String[] args) {
MyThread myThread = new MyThread();
new Thread(myThread).start();
new Thread(myThread).start();
}
static class MyThread implements Runnable {
public synchronized void run() {
for (int i = 0; i < 100; i++) {
if (i % 4 == 0) {
Thread.yield();
} else {
System.out.println("当前线程为。。。。" + Thread.currentThread().getName());
}
}
}
}
}
结果是:
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-0
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
当前线程为。。。。Thread-1
其实执行结果可以看出让出CPU并不是说就一定会让另外一个线程执行,还是抢占式的。
join:
一道经常出现的面试题,怎么保证T1,T2,T3三个同时启动的线程按照顺序执行,例如顺序T1,T2,T3
package com.yuxi;
/**
* 一道经常出现的面试题,怎么保证T1,T2,T3三个同时启动的线程按照顺序执行,例如顺序T1,T2,T3
* Created by yuxi on 17/1/27.
*/
public class JoinDemo {
public static void main(String[] args) {
final Thread T1 = new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(10);
System.out.println("this is t1");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
final Thread T2 = new Thread(new Runnable() {
public void run() {
try {
T1.join();
Thread.sleep(10);
System.out.println("this is t2");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
final Thread T3 = new Thread(new Runnable() {
public void run() {
try {
T2.join();
Thread.sleep(10);
System.out.println("this is t3");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
T2.start();
T3.start();
T1.start();
}
}
结果是:
this is t1
this is t2
this is t3
网友评论