![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试题
小小马3707
这个作者很懒,什么都没留下…
展开
-
【Java高并发】线程池的实现原理
线程池的主要处理流程当向线程池提交一个任务之后,线程池是如何处理这个任务的呢?我们来看一下线程池的主要处理流程,处理流程图如下图所示。 从图中可以看出,当提交一个新任务到线程池时,线程池的处理流程如下。 1)线程池判断核心线程池里的线程是否都在执行任务。如果不是,则创建一个新的工作线程来执行任务。如果核心线程池里的线程都在执行任务,则进入下个流程。 2)线程池判断工作队列是否已经满。如果工作队列没有满,则将新提交的任务存储在这个工作队列里。如果工作队列满了,则进入下个流程。 3)线.原创 2020-12-17 22:15:49 · 180 阅读 · 0 评论 -
【Java高并发】Volatile的两种特性
当一个变量定义为 volatile 之后,将具备两种特性: 1.保证此变量对所有的线程的可见性,当一个线程修改了这个变量的值,volatile 保证了新值能立即同步到主内存,以及每次使用前立即从主内存刷新。这样的话当其他线程要使用这个变量的时候,就会拿到最新更新的值,保证了数据一致性。比如上面这个例子,running就是一个被volatile修饰的变量,当主线程修改了running的时候,t1线程就会停止,但是当去掉volatile修饰的时候,t1线程就无法得知running在主线程已经被改变原创 2020-12-16 16:57:39 · 143 阅读 · 0 评论 -
【Java高并发】停止线程的两种方式
使用退出标志,使线程正常退出退出标志flag最好加一个volatile修饰,保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。使用 interrupt 方法中断线程在遇到 sleep() 或者 wait() 这样的操作,我们可以通过中断来处理了。public static native void sleep(long millis) throws InterruptedExceptionThread.sleep() 方法会抛出一原创 2020-12-15 10:51:40 · 89 阅读 · 0 评论 -
【Java高并发】线程安全的使用HashMap(Hashtable & ConcurrentHashMap)
线程安全的使用HashMapHashtable ConcurrentHashMapHashtableHashtable 中的方法是Synchronize的,Hashtable的所有方法都是同步的。 此时,无竞争的同步会导致可观的性能代价。ConcurrentHashMap原理上来说:ConcurrentHashMap 采用了分段锁技术,其中 Segment 继承于 ReentrantLock。不会像 HashTable 那样不管是 put 还是 get 操作都需要做同步处理,理论上 Co原创 2020-12-15 10:23:22 · 224 阅读 · 0 评论 -
【知识点】PrintWriter中write()方法和print()方法的区别
PrintWriter中write()方法和print()方法的区别print方法在打印的时候调用了toString方法,可以将打印对象转换成字符串的形式输出。比如可以打印一个user实例;write方法只能打印字符串数据。...原创 2020-11-26 11:08:38 · 1084 阅读 · 0 评论