线程的初步学习(1)
线程可以通过继承Thread类和实现Runnable接口,重写run()方法,编写线程执行体,创建线程对象,调用start()方法启动线程。线程不一定立即执行,要看cpu调度。
线程具有新生状态(相当于new的时候),就绪状态(调用start方法的时候),运行状态 ,阻塞状态(sleep,wait,同步锁定),死亡状态

线程礼让Yield
让在运行的线程暂停,不是阻塞,线程礼让从运行变成就绪状态,礼让的线程是否执行,依旧需要看cpu的调度
假设有两个线程 A 和 B ,A正在CPU中,让A线程礼让,A线程从CPU中出来,重新变成A和B线程竞争,依旧需要看CPU的调度
线程的强制执行Join
可以理解为插队
先运行插队的线程,其他线程阻塞,强制执行
观测线程状态
public class Thread05 { public static void main(String[] args) throws InterruptedException { //TIMED_WAITING Thread thread = new Thread(() -> { try { for (int i = 0; i < 5; i++) { Thread.sleep(1000); } } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("++++++++++++"); }); //获得线程RUN状态 Thread.State state = thread.getState(); System.out.println(state); //获得线程RUNNABLE状态 thread.start(); state = thread.getState(); System.out.println(state); while (state != Thread.State.TERMINATED){ Thread.sleep(100); state=thread.getState(); System.out.println(state); } } }
线程的优先级
线程的优先级高可能先执行,依旧需要看CPU的调度,线程默认优先级为5
先设置优先级,再启动
线程的优先级范围 1~10
public class Thread06 implements Runnable { @Override public void run() { //获得线程的名字和线程的优先级 System.out.println(Thread.currentThread().getName()+ "<=====>"+Thread.currentThread().getPriority()); } public static void main(String[] args) { Thread06 thread06 = new Thread06(); Thread t1 = new Thread(thread06); t1.setPriority(Thread.MAX_PRIORITY); t1.start(); Thread t2 = new Thread(thread06); t2.setPriority(8); t2.start(); Thread t3 = new Thread(thread06); t3.setPriority(6); t3.start(); Thread t4 = new Thread(thread06); t4.setPriority(4); t4.start(); Thread t5 = new Thread(thread06); t5.setPriority(2); t5.start(); }
守护线程
线程分为用户线程和守护线程
虚拟机不用等待守护线程结束,虚拟机必须等待用户线程结束,默认都是用户线程
通过setDaemon()方法设置守护线程

浙公网安备 33010602011771号