Java多线程个人笔记

优先级:实例.setPriority() (抛偶卧底)
并不是优先级高的就一定有限执行。默认是:5。【最低1.最高10】
只是修改抢到cpu的概率
线程礼让:Thread.yield();(由)
线程运行状态再回到就绪状体
临界资源:
多个线程去访问同一个资源 回出现临界资源问题;
解决办法就是:‘锁’

同步代码块:对象锁
synchronized (" ") {
临界资源代码块
};
类锁:
synchronized (类.class) {
临界资源代码块
};
多个线程看到的锁最好是同一把锁。

同步方法:在方法上加 Synchronized来修饰
静态方法同步锁是:类.class
非静态方法同步锁是:this

实例话一个锁:final ReentrantLock lock = new ReentrantLock();
//开启锁
lock.lock();
临界资源代码
//关闭锁
lock.unlock();

死锁:都持有对方的锁标记而不释放自己的

线程池:

ExecutorService接口
//执行之前的任务,不接受新任务,否则抛异常, shutdown 关闭线程池
pool.shutdown();

//关闭线程池,执行第一个任务,停止所有正在等待的线程,并打印出来
List list = pool.shutdownNow();
System.out.println(list);

性能最大化,服务器与硬件都非常好。每来一个任务就创建一个线程。就使用:newCachedThreadPool()
性能差点,服务器与硬件都差一点,之定义线程池。就使用:newFixedThreadPool()
保证线程安全,例如:银行取钱,存钱。就使用:newSingleThreadExecutor()

延时执行的定时任务线程池
newScheduledThreadPool
ScheduledFuture schedule(Callable callable, long delay, TimeUnit unit)
Callable callable
线程任务
long delay
延时时间
TimeUnit unit
时分秒单位

猜你喜欢

转载自blog.csdn.net/weixin_48278764/article/details/107592222