main(非守护线程)和jvm其他的守护线程(守护线程后续会介绍)
线程生命周期:
blocked状态线程获取锁或结束睡眠变为runnable状态,然后获取到cpu时间片变为running状态。running状态线程也会因为cpu时间片分配切换线程使其变为runnable,然后再获取到时间片变为running(这些进程“看起来像”同时运行,实则是轮番运行,由于时间片通常很短(在Linux上为5ms-800ms),用户不会感觉到)
创建线程的方式1:
Thread thread1=new Thread(){
run(){
//业务方法体
}
}
thread1.start();
明明复写run方法为什么要调.start()呢?
因为内部用的模板方法的技巧,线程内部实现,start()内部调用run(),并做了其他处理,所以创建线程我们只用实现run()即可。
创建线程的方式2:
PrimeRun A = new PrimeRun("A"); //实例化线程要执行的任务
Thread Ta = new Thread(A); //实例两个线程对象,实际传递的是一个任务
Thread Tb = new Thread(A); //因为两个线程执行的是一个任务,所以资源是共享的
Ta.start();
Tb.start();
使用实现Runnable接口方式创建线程可以共享同一个目标对象(TreadDemo1 tt=new TreadDemo1();),实现了多个相同线程处理同一份资源。
runnable这种设计思想,有助于业务逻辑与系统代码分离,降低整体耦合度。