-
111111111111
查看全部 -
Runnable的优势
查看全部 -
JAVA线程有两类
用户线程;守护线程
守护线程:运行在后台,为其他前台线程服务
特点:一旦所有的用户线程都结束运行,守护先会随JVM一起结束工作
最常见的守护线程:垃圾回收线程
应用:数据库连接池中的监测线程
JVM虚拟机启动后的监测线程
Thread 类的 setDaemon方法设置为true设置守护线程
setDaemon必须在start()方法前调用
守护线程中产生的新线程也是守护线程
不是所有的任务都可以分配给守护线程来执行,比如读写操作或者计算逻辑;
查看全部 -
Thread thread = new Thread(daemonThread);
thread.setDaemon(true);//设置线程为守护线程
查看全部 -
线程的生命周期
查看全部 -
线程生命周期之阻塞状态,阻塞状态被解除后,又会进入就绪状态等待获取cpu
查看全部 -
线程生命周期之运行状态
查看全部 -
线程生命周期之就绪状态
查看全部 -
两种方式比较
查看全部 -
两种线程的创建方式
查看全部 -
jstack
作用:生成JVM当前时刻线程的快照(threaddump,即当前进程中所有线程的信息)
目的:帮助定位程序问题出现的原因,如长时间停顿、CPU占用率过高等
查看全部 -
Java线程有两类
用户线程:运行在前台,执行具体的任务
程序的主线程、连接网络的子线程等都是用户线程
守护线程:运行在后台,为其他前台线程服务
特点:一旦所有用户线程都结束运行,守护线程会随JVM一起结束工作
应用:数据库连接池中的监测线程
JVM虚拟机启动后的监测线程
最常见的守护线程:垃圾回收线程
可以通过调用Thread类的setDaemon(true)方法来设当前线程为守护线程
注意:setDaemon(true)方法必须在start()方法之前调用,否则会抛出IllegalThreadStateException异常
在守护线程中产生的新线程也是守护线程
不是所有的任务都可以分配给守护线程来执行,比如读写操作或者计算逻辑
查看全部 -
线程的生命周期
创建:创建一个Thread对象
就绪:创建了线程对象后,调用了线程的start()方法(注意:此时线程只是进入了线程队列,等待获取CPU服务,具备了运行的条件,但并不一定已经开始运行了)
运行:处于就绪状态的线程,一旦获取了CPU资源,便进入到运行状态,开始执行run()方法里面的逻辑
终止:线程的run()方法执行完毕,或者线程调用了stop()方法,线程便进入了终止状态。
阻塞:一个正在执行的线程在某些情况下,由于某种原因而暂时让出了CPU,暂停自己的执行,便进入了阻塞状态。如调用sleep()、join()、wait()方法
线程从阻塞状态解除后重新进入就绪状态。
查看全部 -
使用同一个Runnable实现类对象,创建线程可以实现线程之间的资源共享
线程执行时机不能确定,线程start()之后不一定能立即获得CPU时间片,获得CPU资源后也会被其他线程抢占CPU资源,导致每次执行结果不同。
查看全部 -
Thread和Runnable两种方式比较
Runnable方式可以避免Thread方式由于Java单继承特性带来的缺陷
Runnable的代码可以被多个线程(Thread实例)共享,适合于多个线程处理同一资源的情况
查看全部
举报