线程分为用户线程和守护线程(daemon)。
1.继承Thread类,重写run()方法,调用start开启线程
2.实现Runable接口方式
public class TestRunable implements Runnable { @Override public void run() { for(int i=0;i<200;i++){ System.out.println("----------444444"); } } @Test public static void main(String args[]){ TestRunable testRunable=new TestRunable(); new Thread(testRunable).start(); for(int i=0;i<500;i++){ System.out.println("++++++++++888888"); } } }
3.实现Callable接口
线程状态:
创建状态:线程对象一旦创建就进入到新生状态。
阻塞状态:当调用sleep,wait或同步锁定时,线程进入阻塞状态,就是代码不往下执行,阻塞
事件解除后,重新进入就绪状态,等待cpu调度执行。
死亡状态:线程中断或者结束,一旦进入死亡状态,就不能再次启动。
就绪状态:
运行状态:进入运行状态,线程才真正执行线程体的代码块。
线程方法:
setPriority(int newPriority):更改线程的优先级 1~10
static void sleep(long millis):在制定的毫秒数内让当前正在执行的线程休眠
void join():等待该线程终止
void interrupt():中断线程,不建议用这种方式
boolean isAlive():测试线程是否处于活动状态。
死亡 之后的线程无法再次启动。