【Java】线程

线程

€○nJZuc发布于 19 分钟前

线程

正在运行的程序,也就是占用的内存区域

特点:独立性

动态性

并发性

线程

是操作系统能够运行的最小单位,也是进程实际的运作单位,一个进程可以有多个线程,当一个进程只有一个线程时,被称作单线程;当有多个线程时,被称作多线程。

线程

状态:新建  就绪 运行  阻塞 终止

阻塞原因:a等待阻塞-线程处在wait()方法中

b同步阻塞-线程在获取synchronized同步锁失败,进入同步阻塞

c其它阻塞-通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

线程比较

【Java】线程

线程锁

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】线程
  
    

线程安全

原子性:提供互斥访问,同一时刻只能有一个线程对数据进行操作

可见性:一个线程对主内存的修改可以及时地被其他线程看到

有序性:一个线程观察其他线程中的指令执行顺序,由于指令重排序,该观察结果一般杂乱无序

java

阅读 13发布于 19 分钟前

本作品系原创,采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议


java学习历程

初学者

avatar

€○nJZuc

初学者

1 声望

0 粉丝

0 条评论

得票时间

avatar

€○nJZuc

初学者

1 声望

0 粉丝

宣传栏

线程

正在运行的程序,也就是占用的内存区域

特点:独立性

动态性

并发性

线程

是操作系统能够运行的最小单位,也是进程实际的运作单位,一个进程可以有多个线程,当一个进程只有一个线程时,被称作单线程;当有多个线程时,被称作多线程。

线程

状态:新建  就绪 运行  阻塞 终止

阻塞原因:a等待阻塞-线程处在wait()方法中

b同步阻塞-线程在获取synchronized同步锁失败,进入同步阻塞

c其它阻塞-通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

线程比较

【Java】线程

线程锁

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】线程
  
    

线程安全

原子性:提供互斥访问,同一时刻只能有一个线程对数据进行操作

可见性:一个线程对主内存的修改可以及时地被其他线程看到

有序性:一个线程观察其他线程中的指令执行顺序,由于指令重排序,该观察结果一般杂乱无序

以上是 【Java】线程 的全部内容, 来源链接: utcz.com/a/105861.html

回到顶部