JUC
JUC
叕叕666
这个作者很懒,什么都没留下…
展开
-
java中CAS的实现原理
什么是CASCAS全称compare and swap 或 compare and set 或 compare and exchange,也就是比较并交换。比较并交换是什么意思呢?java中有一些类是以Atomic开头的,例:AtomicInteger;这些类就是通过CAS的方式来保证线程安全的。new AtomicInteger().incrementAndGet()public final int incrementAndGet() { return U.getAndAddInt(t原创 2022-03-31 14:54:55 · 663 阅读 · 0 评论 -
java 中volatile的作用及其实现原理和JVM的内存屏障
堆虽然是所有线程共享的,但是每个线程还有只属于自己的空间,当一个线程去堆中取值时会复制一份到自己的空间,对这个这个值进行修改会先在自己的空间里修改然后再写到堆中,但是其他线程是不知道你修改了,这就是线程之间的不可见。加了volatile之后就能够保证一个线程修改另一个线程马上就能看到。原创 2022-03-28 13:26:37 · 940 阅读 · 0 评论 -
java 中的synchronized及其锁升级的理解
当对num进行++操作,多个线程同时访问时,第一个线程将num读出来,假设读到的是0,然后把它+1,但在这个还没有写回去的时候,第二个线程来了读到它还是0,也对其+1,之后写回去,发现两个线程都是读到的0,写回去的是1,本来应该加两次变成2,结果却是1,这就出现了少加的现象原创 2022-03-26 15:03:08 · 560 阅读 · 0 评论 -
java线程的状态
1:当newThread()后这个线程就处于New(新建状态),调用start()这个线程就会被放到CPU的等待队列里等待CPU的运行,此时则为Ready(就绪状态)2:当CPU开始执行这个线程,这个线程变成Running(运行状态)3:当这个线程执行完了,这个线程变成Teminated(结束状态)4:在Running(运行状态)时,调用Thread.yield()方法,会让出CPU转变成Ready(就绪状态)5-1:在Running(运行状态)时,调用Thread.sleep(time)、ob..原创 2022-03-26 13:14:39 · 531 阅读 · 0 评论 -
java 创建线程的方式?停止线程的方式?
======创建线程的方式======继承Thead类,重写run()方法实现Runnable类,重写run()方法使用lombda实现Callable类,重写call()方法使用线程池======停止线程的方式======使用stop()方法使用suspend()和resume()方法配合volatile使用interrupt()方法什么都不做,让线程自然结束原创 2022-03-23 15:19:20 · 2776 阅读 · 0 评论 -
什么是程序?什么是进程?什么是线程?
什么是程序什么是进程什么是线程单核CPU用多线程是否有意义原创 2022-03-23 14:56:02 · 716 阅读 · 0 评论 -
Java Thread类中interrupt()、interrupted()、isInterrupted()方法
interrupt()、interrupted()、isInterrupted()原创 2022-03-18 14:19:38 · 560 阅读 · 0 评论 -
java中ReentrantReadWriteLock的使用
ReentrantReadWriteLock(读写锁)使用:> ReadWriteLock readWriteLock = new ReentrantReadWriteLock();> readWriteLock.readLock().lock();//拿读锁> boolean res = readWriteLock.readLock().tryLock();//拿到读锁返回true,没拿到返回false > boolean res = readWriteLock.re原创 2021-03-29 11:19:13 · 176 阅读 · 0 评论 -
java中ReentrantLock的使用
ReentrantLock(互斥锁,可重入锁)使用:ReentrantLock reentrantLock = new ReentrantLock();reentrantLock.lock();//拿锁boolean res = reentrantLock.tryLock();//拿到锁返回true,没拿到返回falseboolean res = reentrantLock.tryLock(100,TimeUnit.SECONDS);//100秒内拿到锁返回true,否则没拿到返回falsere原创 2021-03-29 11:03:00 · 1107 阅读 · 0 评论 -
java使用synchronized加锁
synchronized的作用:同步代码块不使用synchronizedpublic class MyRunnable implements Runnable{ private Integer id = 0; @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println("我是 "+Thread.currentThr原创 2021-03-29 10:43:25 · 200 阅读 · 0 评论 -
java里ThreadLocal的使用
ThreadLocal的作用:使变量在每个线程独立ThreadLocal的使用:ThreadLocal threadLocal = new ThreadLocal<>(); //创建ThreadLocal对象(有泛型,多个对象创建多个ThreadLocal对象)threadLocal.set(T t); //设置变量 T temp = threadLocal.get();//读取变量threadLocal.remove(); //释放资源,防止内存泄漏例:没有使用Threa原创 2021-03-29 10:25:48 · 186 阅读 · 0 评论 -
java并发工具
CountDownLatch作用:当线程执行一定的数量之后,才继续执行后序代码CountDownLatch countDownLatch = new CountDownLatch(3);//需要执行的线程数量new Thread(new Runnable() { @Override public void run() { System.out.println(111); countDownLatch.countDown();//计数 }}).s原创 2021-03-28 14:11:20 · 75 阅读 · 0 评论 -
java线程池的使用
java自带的线程池可缓存线程池特点:对线程的个数没有限制,无法控制线程的最大并发数使用:ExecutorService executorService = Executors.newCachedThreadPool()executorService .execute(Runnable MyRunnable)定长线程池特点:指定最大线程的个数使用:ExecutorService executorService = Executors.newFixedThreadPool(10)原创 2021-03-28 12:29:03 · 60 阅读 · 0 评论 -
java在并发编程时的特性
可见性:当多个线程操作一块内存时,一个线程将内存中的数据放入自己的缓存中进行修改,对于其他线程来说此修改是不可见的。解决办法:在变量定义时添加volatile修饰;使用synchronized加锁。原子性:每个线程在运行时可能会被CPU中断。解决办法:使用原子类,Atomicxxx。例:AtomicInteger x= new AtomicInteger(0);使用synchronized加锁。有序性:多个线程在运行时,代码的运行顺序可能会改变。解决办法:在变量定义时添加volatile修饰原创 2021-03-28 11:08:48 · 54 阅读 · 0 评论