本文已参与「新人创作礼」活动,一起开启掘金创作之路。
- 个人简介:微信公众号关注:SteveCode。为您分享更多的知识学术。生于忧患死于安乐 优先级:实例.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 时分秒单位