目录
线程状态
线程有四种状态
1.新建一个线程的时候 线程就处于 新生状态
2.调用。start()方法的时候线程就处于 就绪状态:系统随机运行线程,就绪状态不代表立即进入运行状态
3.运行状态:线程被系统调用到 开始运行
4.阻塞状态:产生阻塞的几种方法 上锁synchronized ,等待wait(),延迟sleep(),插队join()//下面会一一介绍使用(阻塞状态接触后并不能直接进入运行状态,而是进入就绪状态等待系统调用
5.死亡状态:线程结束 run()方法跑完。(线程死亡后无法再次进入新生状态,再次新生的是另一个线程了)
线程五种状态关系如下图所示
线程方法
如下图所示
线程插队
package com.thread02;
/*
* 线程插队,强制执行
*/
public class ThreadJoin implements Runnable{
public static void main(String[] args) {
ThreadJoin my =new ThreadJoin();
//new Thread(t).start();
Thread t=new Thread(my);
t.start();
for(int i=0;i<5;i++) {
if(i>2) {
try {
t.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+"I="+i);
}
}
@Override
public void run() {
//编写线程体
for(int i=0;i<5;i++) {
System.out.println(Thread.currentThread().getName()+"====="+i+"-------");
}
}
}
线程礼让
package com.thread02;
public class ThreadYeild1 implements Runnable {
public static void main(String[] args) {
ThreadYeild1 my=new ThreadYeild1();
Thread t1=new Thread(my,"线程A");
Thread t2=new Thread(my,"线程B");
t1.start();
t2.start();
}
@Override
public void run() {
for(int i=0;i<20;i++) {
if(i==2) {
System.out.println(Thread.currentThread().getName()+"礼让");
Thread.yield();
}
System.out.println(Thread.currentThread().getName()+"i="+i);
}
}
}
线程名字,优先级
package com.thread02;
public class ThreadName implements Runnable {
public static void main(String[] args) {
new Thread(new ThreadName()).start();
ThreadName t1=new ThreadName();
ThreadName t2 =new ThreadName();
new Thread(t1).start();
new Thread(t2).start();
}
@Override
public void run() {
Thread t= Thread.currentThread();
System.out.println("当前线程名称"+t.getName());
System.out.println("当前线程优先级"+t.getPriority());
}
}