随笔分类 - 线程和锁
摘要:场景一 在我们面试中经常会有这么一个场景,就是我们用线程A输出“A”字符,有线程B输出“B”字符,交替进行,要求A线程执行完任务输出:“A线程打印完了”,B线程执行完任务输入:“B线程打印完了”,最后有主线程输出一句话“我打印完了”! 当你看到这个场景时,有点多线程经验的人肯定会感觉很容易,然后有可
阅读全文
摘要:为什么要用线程池? 单独创建线程的缺点: a. 每次new Thread新建对象性能差。 b. 线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致死机或oom。 c. 缺乏更多功能,如定时执行、定期执行、线程中断。 创建线程池的优点: a. 重用存在的线程,减少对象创建、
阅读全文
摘要:创建方式 继承Thread类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。 (2)创建Thread子类的实例,即创建了线程对象。 (3)调用线程对象的start()方法来启动该线程。 实现Runnable接口
阅读全文
摘要:基本介绍 synchronized是Java实现同步的一种机制,它属于Java中关键字,是一种jvm级别的锁。synchronized锁的创建和释放是此关键字控制的代码的开始和结束位置,锁是有jvm控制的创建和释放的,正是因为这一点,synchronized锁不需要手动释放,哪怕是代码出现异常,jv
阅读全文
摘要:基本介绍 java.util.concurrent.locks是java1.5之后出现的一种锁实现方式,是一个接口。但是在这之前已经有一个同步机制的实现就是synchronized关键字,那为什么还要再出现一个LOCK接口呢?最主要的原因就是为了弥补synchronized使用中的不足。 synch
阅读全文
摘要:线程状态 1、新建状态(New):新创建了一个线程对象。 2、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于“可运行线程池”中,变得可运行,只等待获取CPU的使用权。即在就绪状态的进程除CPU之外,其它的运行所需资源都已全部获得。 3、运行状
阅读全文
摘要:Java中实现锁的方式有多种,并且锁的分类也有很多,这篇文章会从锁分类方面简单介绍各分类的锁的特点。 公平锁和非公平锁 公平锁:就是很公平,在并发环境中,每个线程在获取锁时会先查看此锁维护的等待队列,如果为空,或者当前线程是等待队列的第一个,就占有锁,否则就会加入到等待队列中,以后会按照锁请求的FI
阅读全文

浙公网安备 33010602011771号