线程礼让
线程的礼让是指先将资源让出去让别的线程先执行。线程的礼让可以使用Thread中提供的方法:
- 礼让:public static void yield();
范例:没使用礼让的操作
package multithreading;
public class Comity {
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(()->{
for (int i = 0; i < 20; i++) {
try {
Thread.sleep(500); //线程休眠
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+ "执行、i = "+i);
}
},"线程对象");
thread.start();
for(int x = 0;x < 20;x++) {
Thread.sleep(500);
System.out.println("【main线程】 x =" + x);
}
}
}
【main线程】 x =0
线程对象执行、i = 0
线程对象执行、i = 1
【main线程】 x =1
线程对象执行、i = 2
【main线程】 x =2
【main线程】 x =3
线程对象执行、i = 3
【main线程】 x =4
线程对象执行、i = 4
线程对象执行、i = 5
【main线程】 x =5
【main线程】 x =6
线程对象执行、i = 6
线程对象执行、i = 7
【main线程】 x =7
线程对象执行、i = 8
【main线程】 x =8
线程对象执行、i = 9
【main线程】 x =9
线程对象执行、i = 10
【main线程】 x =10
线程对象执行、i = 11
【main线程】 x =11
线程对象执行、i = 12
【main线程】 x =12
线程对象执行、i = 13
【main线程】 x =13
线程对象执行、i = 14
【main线程】 x =14
线程对象执行、i = 15
【main线程】 x =15
线程对象执行、i = 16
【main线程】 x =16
线程对象执行、i = 17
【main线程】 x =17
线程对象执行、i = 18
【main线程】 x =18
线程对象执行、i = 19
【main线程】 x =19
范例:使用礼让的操作
package multithreading;
public class Comity {
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(()->{
for (int i = 0; i < 20; i++) {
if(i % 3 == 0) {
Thread.yield();//线程礼让,让其他抢占同一资源的线程先执行
System.out.println("。。。线程礼让。。。");
}
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+ "执行、i = "+i);
}
},"线程对象");
thread.start();
for(int x = 0;x < 20;x++) {
Thread.sleep(500);
System.out.println("【main线程】 x =" + x);
}
}
}
。。。线程礼让。。。
【main线程】 x =0
线程对象执行、i = 0
【main线程】 x =1
线程对象执行、i = 1
【main线程】 x =2
线程对象执行、i = 2
。。。线程礼让。。。
【main线程】 x =3
线程对象执行、i = 3
【main线程】 x =4
线程对象执行、i = 4
【main线程】 x =5
线程对象执行、i = 5
。。。线程礼让。。。
【main线程】 x =6
线程对象执行、i = 6
线程对象执行、i = 7
【main线程】 x =7
【main线程】 x =8
线程对象执行、i = 8
。。。线程礼让。。。
【main线程】 x =9
线程对象执行、i = 9...
礼让执行的时候每一次调用yield()方法都只会礼让一次当前的资源。