Java多线程
HelloWorld丶丶
这个作者很懒,什么都没留下…
展开
-
Hashtable、HashMap和ConcurrentHashMap
首先,HashMap是线程不安全的,Hashtable和ConcurrentHashMap是线程安全的。在单线程情况下,使用HashMap效率最高。在多线程情况下,使用ConcurrentHashMap比Hashtable效率高。ConcurrentHashMap和Hashtable的效率不同的原因是因为它们的实现方式不同。Hashtable中有Entry数组,对该数组进行put、get...原创 2018-02-10 19:10:16 · 237 阅读 · 0 评论 -
单例模式的写法及注意事项
注意事项: 私有构造函数私有静态引用指向自己的实例以自己实例为返回值的公有静态方法尽量使用懒加载写法 第一种:饿汉public class Singleton { private static Singleton instance = new Singleton(); private Singleton(){} public static...原创 2018-02-25 13:26:21 · 624 阅读 · 0 评论 -
synchronized底层如何实现的?用在代码块和方法上有什么区别?
。原创 2018-02-24 19:44:45 · 824 阅读 · 1 评论 -
synchronized与lock的区别
(用法)synchronized是隐式锁,可以用在方法上,也可以用在特定代码块中,由JVM来管理锁的释放。(用法)lock是显式锁,需要显式指定起始位置和终止位置,一般使用ReenterantLock类作为锁,多个线程中要使用同一个ReenterantLock对象才能保证锁的生效。在加锁和解锁处需要通过lock和unlock显式指出,所以一般会在finally块中写unlock以防死锁。Loc...转载 2018-02-24 18:14:11 · 367 阅读 · 0 评论 -
volatile关键字如何保证内存可见性
volatile的作用: 保证内存可见性(但不保证操作的原子性)。防止指令重排。(一)内存可见性JVM内存模型:主内存和线程独立的工作内存 Java内存模型规定,对于多个线程共享的变量,存储在主内存当中,每个线程都有自己独立的工作内存(比如CPU的寄存器),线程只能访问自己的工作内存,不可以访问其他线程的工作内存。工作内存中保存了主内存共享变量的副本,线程要操作这些共享变量,...转载 2018-02-23 01:00:42 · 6208 阅读 · 0 评论 -
sleep和wait分别是那个类的方法,有什么区别
sleep是Thread类的方法,wait是Object类的方法。区别: sleep方法是Thread类的静态方法,调用此方法会让当前线程暂停指定的时间,将执行机会(CPU)让给其他线程,但是不会释放锁,因此休眠时间结束后自动恢复(程序回到就绪状态)。wait是Object类的方法,调用对象的wait方法导致线程放弃CPU的执行权,同时也放弃对象的锁(线程暂停执行),进入对象的等待池(wa...原创 2018-02-24 17:34:41 · 2006 阅读 · 0 评论 -
Java中的concurrent包
concurrent包是在JDK1.5时加入的,常说的concurrent包主要由三个package组成 java.util.concurrent:提供大部分关于并发的接口和类,如BlockingQueue,Callable,ConcurrentHashMap,ExecutorService,Semaphore等。java.util.concurrent.atomic:提供所有原子操作的类,...转载 2018-02-22 21:56:56 · 612 阅读 · 0 评论 -
什么是线程池,如何设计一个动态大小的线程池,应该有哪些方法?
什么是线程池? 线程池是管理线程对象的容器,将任务提交到线程池后,线程池会使用线程池中的线程来执行任务,线程使用完毕后不需要销毁而是放回池中,从而可以减少创建和销毁线程对象的开销。如何设计一个动态大小的线程池,应该有哪些方法? 一个线程池包括以下四个基本组成部分: 线程池管理类(ThreadPool):用来创建线程,销毁线程,添加新任务等。工作线程(PoolWorker):线程池中的...转载 2018-02-21 13:23:40 · 1405 阅读 · 0 评论 -
多线程共用一个数据变量需要注意什么?
如果只是对变量进行读取没有写入的话,那么不需要进行特殊的操作。但是如何又有读取又有写入的话,那么需要保证线程安全,防止脏读。可以用volatile来保证操作(对变量的读写)的可见性,如果这还不能保证线程安全的话,那么就要使用加锁来保证操作的可见性和原子性来保证线程安全。...原创 2018-02-19 02:35:36 · 4914 阅读 · 0 评论 -
多线程之间如何进行信息交互
Object中的wait、notify和notifyAll方法。ReenterantLock得到的Condition中的await、signal和signalAll方法。原创 2018-02-19 02:18:23 · 2648 阅读 · 0 评论 -
线程安全
什么是线程安全? 多线程访问时,使用加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完毕,其他线程才可使用。不会出现数据不一致或者数据污染。线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据就是脏数据。如何保证线程安全? 对成员变量使用volatile关键字。对程序段使用加锁机制(synchronized和Lock) 。...原创 2018-02-19 02:10:13 · 164 阅读 · 0 评论 -
Java实现多线程的四种方式以及四种方式之间的区别
四种方式: 继承Thread类,重写其中的run方法,最后调用其start方法,开启新的线程来执行重写的run方法。实现Runnable接口实现里面的run方法,将该实现类的对象传入Thread中,调用Thread的start方法,开启新的线程来执行Runnable接口实现类的run方法。实现Callable接口实现里面的call方法,将该实现类的对象传入FutureTask对象中,再将F...原创 2018-02-19 01:46:33 · 936 阅读 · 0 评论 -
volatile
你真的了解volatile关键字吗?转载 2018-03-06 15:09:41 · 386 阅读 · 0 评论