首先线程有守护线程和用户线程两种,区别就是用户线程是否保持程序的运行状态。当程序在运行时,必定有一个或以上的线程是用户线程,而当程序结束时,所有守护线程也都将被关闭。使用Thread.setDaemon(ture)可以把线程标记为守护线程,默认线程状态继承自创建它的线程。线程的两种创建方法不多说了。
线程安全一般指的是共享变量被多个线程访问读写造成的数据不一致或者是数据不完整性。一般有如下几种方法可供参考:
1.synchronized方法,提供只能供一个线程访问的类,方法或语句块,控制变量的修改是在可控范围内的。
2.lock方法,可使用java.util.concurrent.locks包内的读写锁或重入锁来控制。
3.ThreadLocal变量来为每个线程单独获取一份变量的拷贝。
4.机器指令级的原子性操作,如java.util.concurrent.atomic包中的变量。用CAS(compare and swap)来保证数据更新的有效性。即无锁机制来保证高并发量时的性能,保持高的吞吐量。
5.还没想好
jdk中本身提供了线程池的实现,用起来很方便。
大致上有这么几种线程池
待续
时间: 2024-10-04 00:52:17