sleep方法:线程休眠
作用:阻塞线程指定的时间,时间到了线程自动恢复运行
总结:谁执行,谁阻塞
yield方法:线程让步
作用:让出cup的使用权,和其他线程一起等待调度程序的调度
总结:谁执行,谁让步
小案例如下说明yield方法的让步:
先一个播放器,实现声音、字幕和图像的同时播放,使用yield方法实现声音的让步
声音线程类:
package com.thread.entity;
public class AudioThread extends Thread{
//重写run方法,在run方法里面实现功能
@Override
public void run() {
//实现声音的播放功能
for (int i = 0; i < 100; i++) {
System.out.println("播放声音----"+i);
//此句代码将有AudioThread类型的线程对象执行,执行此句代码的线程对象会让出cpu的使用权
//总结:谁执行,谁让步
Thread.yield();
}
}
}
字幕线程类:
package com.thread.entity;
public class SubtitleThread extends Thread{
//重写run方法,在run方法里面实现功能
@Override
public void run() {
//实现字幕的播放功能
for (int i = 0; i < 100; i++) {
System.out.println("播放字幕--"+i);
}
}
}
图像线程类:
package com.thread.entity;
public class VideoThread extends Thread{
//重写run方法,在run方法里面实现功能
@Override
public void run() {
//实现图像的播放功能
for (int i = 0; i < 100; i++) {
System.out.println("播放图像------"+i);
}
}
}
视频播放类:
package TestJoin;
import com.thread.entity.AudioThread;
import com.thread.entity.SubtitleThread;
import com.thread.entity.VideoThread;
public class Player{
//播放影片的功能
public void play(){
//播放声音、图像和字幕
//创建三个线程
VideoThread vt = new VideoThread();
vt.start();
AudioThread at = new AudioThread();
at.start();
SubtitleThread st = new SubtitleThread();
st.start();
}
}
测试类:
package TestJoin;
public class TestPlayer {
public static void main(String[] args){
Player player = new Player();
player.play();
}
}