Java进程笔记

1. 为什么要是用多线程

为了 更好的利用多核CPU、为了更快的响应时间(比如发送一个请求,请求立即返回,后台用线程继续处理业务)

2.线程的优先级

优先级越高的线程,获得的CPU执行时间片就越多。偏重计算、需要较多CPU时间的操作设置较低的优先级,因为设置较高优先级之后,导致线程一直占用cpu。针对频繁的阻塞的线程(I/O操作)可以设置较高的线程的优先级,因为这类线程占用CPU较少。

3.守护线程

先调用setDaemon方式使线程变成守护线程再执行start方法。

当Java虚拟机中不存在除Daemon之外的线程,java虚拟机将会退出,可能会导致守护线程的Daemon的finally代码块不会被执行。

4. 线程中断

主要分为:线程执行完之后正常结束和调用线程的interrupt方法。

其中调用interrupt并不会立即中断线程,只是生成一个中断标志,只有在线程阻塞的状态下才会被中断。(调用sleep、join、wait方法进入等待状态),中断的线程会抛出InterruptedException并清除标志位。

5.isInterrupted和interrupted方法对比

isInterrupted判断的是调用此方法的线程,如果设置了线程中断标志,则返回true,并不表示线程真正的被中断。interrupted方法 指的是当前线程,如果设置了线程中断标志,返回true,同时会清除线程中断标志。

6.线程之间的通信

通过volatile关键字修饰共享变量或者使用synchronized修饰同步块和方法。

根据volatile的happend-before原则,volatile的写必须对后续的volatile读内存 可见,也就是说每次写volatile变量的时候,把它刷新到内存,每次读volatile变量的时候都从内存读取。

根据synchronized的happend-before原则,锁的释放happend-before锁的获取,现在在释放锁的时候,会将修改的值刷新到内存。

7. wait和notify使用

wait和notify方法调用之前 必须先获得对象的锁。也就是只能 在同步代码块里面执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值