【Java】线程
线程
€○nJZuc发布于 19 分钟前
线程
正在运行的程序,也就是占用的内存区域特点:独立性
动态性
并发性
线程
是操作系统能够运行的最小单位,也是进程实际的运作单位,一个进程可以有多个线程,当一个进程只有一个线程时,被称作单线程;当有多个线程时,被称作多线程。
线程
状态:新建 就绪 运行 阻塞 终止阻塞原因:a等待阻塞-线程处在wait()方法中
b同步阻塞-线程在获取synchronized同步锁失败,进入同步阻塞
c其它阻塞-通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
线程比较
线程锁
l Synchronized 互斥锁(悲观锁,有罪假设)采用synchronized修饰符实现的同步机制叫做互斥锁机制,它所获得的锁叫做互斥锁。每个对象都有一个monitor(锁标记),当线程拥有这个锁标记时才能访问这个资源,没有锁标记便进入锁池。任何一个对象系统都会为其创建一个互斥锁,这个锁是为了分配给线程的,防止打断原子操作。每个对象的锁只能分配给一个线程,因此叫做互斥锁。
2 ReentrantReadWriteLock 读写锁(乐观锁,无罪假设)
ReentrantLock是排他锁,排他锁在同一时刻仅有一个线程可以进行访问,实际上独占锁是一种相对比较保守的锁策略,在这种情况下任何“读/读”、“读/写”、“写/写”操作都不能同时发生,这在一定程度上降低了吞吐量。然而读操作之间不存在数据竞争问题,如果”读/读”操作能够以共享锁的方式进行,那会进一步提升性能。因此引入了ReentrantReadWriteLock,顾名思义,ReentrantReadWriteLock是Reentrant(可重入)Read(读)Write(写)Lock(锁),我们下面称它为读写锁。
读写锁内部又分为读锁和写锁,读锁可以在没有写锁的时候被多个线程同时持有,写锁是独占的。读锁和写锁分离从而提升程序性能,读写锁主要应用于读多写少的场景。
守护线程
守护线程为其主线程提供服务,主线程一旦结束,守护线程也就结束通过isDaemon()来判断一个线程是否是否为守护线程
通过set Daemon()设置线程为守护线程
线程优先级
低优先级:1~4,其中类变量Thread.MIN_PRORITY最低,数值为1;默认优先级:如果一个线程没有指定优先级,默认优先级为5,由类变量Thread.NORM_PRORITY表示;
高优先级:6~10,类变量Thread.MAX_PRORITY最高,数值为10。
setPriority()设置优先级
并行和并发的区别
线程安全
原子性:提供互斥访问,同一时刻只能有一个线程对数据进行操作可见性:一个线程对主内存的修改可以及时地被其他线程看到
有序性:一个线程观察其他线程中的指令执行顺序,由于指令重排序,该观察结果一般杂乱无序
阅读 13发布于 19 分钟前
本作品系原创,采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议
€○nJZuc
初学者
1 声望
0 粉丝
€○nJZuc
初学者
1 声望
0 粉丝
宣传栏
线程
正在运行的程序,也就是占用的内存区域特点:独立性
动态性
并发性
线程
是操作系统能够运行的最小单位,也是进程实际的运作单位,一个进程可以有多个线程,当一个进程只有一个线程时,被称作单线程;当有多个线程时,被称作多线程。
线程
状态:新建 就绪 运行 阻塞 终止阻塞原因:a等待阻塞-线程处在wait()方法中
b同步阻塞-线程在获取synchronized同步锁失败,进入同步阻塞
c其它阻塞-通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
线程比较
线程锁
l Synchronized 互斥锁(悲观锁,有罪假设)采用synchronized修饰符实现的同步机制叫做互斥锁机制,它所获得的锁叫做互斥锁。每个对象都有一个monitor(锁标记),当线程拥有这个锁标记时才能访问这个资源,没有锁标记便进入锁池。任何一个对象系统都会为其创建一个互斥锁,这个锁是为了分配给线程的,防止打断原子操作。每个对象的锁只能分配给一个线程,因此叫做互斥锁。
2 ReentrantReadWriteLock 读写锁(乐观锁,无罪假设)
ReentrantLock是排他锁,排他锁在同一时刻仅有一个线程可以进行访问,实际上独占锁是一种相对比较保守的锁策略,在这种情况下任何“读/读”、“读/写”、“写/写”操作都不能同时发生,这在一定程度上降低了吞吐量。然而读操作之间不存在数据竞争问题,如果”读/读”操作能够以共享锁的方式进行,那会进一步提升性能。因此引入了ReentrantReadWriteLock,顾名思义,ReentrantReadWriteLock是Reentrant(可重入)Read(读)Write(写)Lock(锁),我们下面称它为读写锁。
读写锁内部又分为读锁和写锁,读锁可以在没有写锁的时候被多个线程同时持有,写锁是独占的。读锁和写锁分离从而提升程序性能,读写锁主要应用于读多写少的场景。
守护线程
守护线程为其主线程提供服务,主线程一旦结束,守护线程也就结束通过isDaemon()来判断一个线程是否是否为守护线程
通过set Daemon()设置线程为守护线程
线程优先级
低优先级:1~4,其中类变量Thread.MIN_PRORITY最低,数值为1;默认优先级:如果一个线程没有指定优先级,默认优先级为5,由类变量Thread.NORM_PRORITY表示;
高优先级:6~10,类变量Thread.MAX_PRORITY最高,数值为10。
setPriority()设置优先级
并行和并发的区别
线程安全
原子性:提供互斥访问,同一时刻只能有一个线程对数据进行操作可见性:一个线程对主内存的修改可以及时地被其他线程看到
有序性:一个线程观察其他线程中的指令执行顺序,由于指令重排序,该观察结果一般杂乱无序
以上是 【Java】线程 的全部内容, 来源链接: utcz.com/a/105861.html
得票时间