自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 CountDownLatch

CountDownLatch 是通过一个计数器来实现的, 计数器的初始值为初始任务的数量。 每当完成了一个任务后, 计数器的值就会减 1(CountDownLatch.countDown()方法) 。 当计数器值到达 0 时, 它表示所有的已经完成了任务, 然后在闭锁上等待 CountDownLatch.await()方法的线程就可以恢复执行任务。应用场景:实现最大的并行性:有时我们想...

2020-03-03 16:26:11 93

原创 线程的并发工具类Fork-Join

快速排序,归并排序,二分查找属于分而治之。分治法的设计思想是:将一个难以直接解决的大问题,分豁成一些规模较小的相同问题,以便各个击破,分而治之。通常我们不直接继承ForkjoinTask类,只需要直接继承其子类。(1.RecursiveAction用于没有返回结果的任务,2.RecursiveTask用于有返回值的任务)task要通过ForkJoinPool来执行,使用submi...

2020-03-03 16:21:10 178

原创 调用 yield() 、 sleep()、 wait()、 notify()等方法对锁有何影响?

yield() 、 sleep()被调用后, 都不会释放当前线程所持有的锁。调用 wait()方法后, 会释放当前线程持有的锁, 而且当前被唤醒后, 会重新去竞争锁, 锁竞争到后才会执行 wait 方法后面的代码。调用 notify()系列方法后, 对锁无影响, 线程只有在 syn 同步代码执行完后才会自然而然的释放锁, 所以 notify()系列方法一般都是 syn 同步代码的最后一行。...

2020-03-03 16:04:22 189

原创 线程间的协作等待/通知机制(notify/notifyAll,wait)

是指一个线程 A 调用了对象 O 的 wait()方法进入等待状态, 而另一个线程 B调用了对象 O 的 notify()或者 notifyAll()方法,线程 A 收到通知后从对象 O 的 wait()方法返回, 进而执行后续操作。 上述两个线程通过对象 O 来完成交互, 而对象上的 wait()和 notify/notifyAll()的关系就如同开关信号一样, 用来完成等待方和通知方之...

2020-03-01 18:59:11 258

原创 ThreadLocal 辨析

ThreadLocal 为每个线程都提供了变量的副本, 使得每个线程在某一时间訪问到的并非同一个对象, 这样就隔离了多个线程对数据的数据共享。Spring 的事务就借助了 ThreadLocal 类。Spring 会从数据库连接池中获得一个connection, 然会connection 放进 ThreadLocal 中, 也就和线程绑定了, 事务需要提交或者回滚, 只要从 ThreadLo...

2020-03-01 18:55:15 111

原创 volatile 保证了不同线程对这个变量进行操作时的可见性

即一个线程修改了某个变量的值, 这新值对其他线程来说是立即可见的。不加 volatile 时, 子线程无法感知主线程修改了 ready 的值, 从而不会退出循环,而加了 volatile 后, 子线程可以感知主线程修改了 ready 的值, 迅速退出循环。...

2020-03-01 18:11:12 281

原创 synchronized 内置锁

关键字synchronized 可以修饰方法或者以同步块的形式来进行使用, 它主要确保多个线程在同一个时刻, 只能有一个线程处于方法或者同步块中, 它保证了线程对变量访问的可见性和排他性, 又称为内置锁机制对象锁和类锁:对象锁是用于对象实例方法, 或者一个对象实例上的, 类锁是用于类的静态方法或者一个类的 class 对象上的。 我们知道, 类的对象实例可以有很多个, 但是每个类只有一...

2020-03-01 17:59:19 91

原创 线程的yield(),join()方法以及守护(Daemon)线程

yield()方法: 使当前线程让出 CPU 占有权,不会释放锁资源。join()方法: 把指定的线程加入到当前线程, 可以将两个交替执行的线程合并为顺序执行。比如在线程 B 中调用了线程 A 的 Join()方法, 直到线程 A 执行完毕后, 才会继续执行线程 B。Daemon 线程被用作完成支持性工作, 但是在 Java 虚拟机退出时 Daemon 线程中的 finally 块并不...

2020-03-01 17:14:43 109

原创 线程的生命周期

2020-03-01 16:57:02 52

原创 深入理解线程的 run()和 start()

start()方法让一个线程进入就绪队列等待分配 cpu, 分到 cpu 后才调用实现的 run()方法, start()方法不能重复调用, 如果重复调用会抛出异常。而 run 方法是业务逻辑实现的地方, 本质上和任意一个类的任意一个成员方法并没有任何区别, 可以重复执行, 也可以被单独调用。...

2020-03-01 16:53:54 234

原创 如线程调用了 thread.sleep、 thread.join、 thread.wait 等

如果一个线程处于了阻塞状态(如线程调用了 thread.sleep、 thread.join、thread.wait 等) , 则线程在检查中断标示时如果发现中断标示为 true, 则会在这些阻塞方法调用处抛出 InterruptedException 异常, 并且在抛出异常后会立即将线程的中断标示位清除, 即重新设置为 false。...

2020-03-01 16:48:44 188

原创 JAVA中interrupt(),isInterrupted(),interrupted()都怎么使用?

1.调用线程的interrupt()方法对其进行中断操作,不代表线程会立即停止工作,同样线程也可以不理会这种中断请求,因为java中的线程是协作式,不是抢占式的。2.线程通过方法 isInterrupted()来进行判断是否被中断, 也可以调用静态方法Thread.interrupted()来进行判断当前线程是否被中断, 不过 Thread.interrupted()会同时将中断标识位改写为 ...

2020-03-01 16:40:19 332

原创 JAVA有几种新启线程的方式?

答:两种1.类Thread2.接口Runnablejava对线程的抽象Thread ,Runnable对任务的抽象

2020-03-01 13:22:05 341

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除