Java多线程
周旋再周旋
这个作者很懒,什么都没留下…
展开
-
[并发编程]JUC工具类以一:CountDownLatch、CyclicBarrier、Semaphore
CountDownLatch:减法计数器可以用来倒计时,当两个线程同时执行时,如果一个线程优先执行,可以使用计数器当计数器清零的时候,再让另一个线程执行。countDown():计数器减一(计数器参数是多少,countDown就需要执行多少次,否则未清零就不会唤醒其他线程。)await():计数器停止,唤醒其他线程。在实时系统中的使用场景CyclicBarrier:加法计数器new CyclicBarrier(int parties, Runnable barrierAction),当计数等于partie原创 2022-07-01 21:55:42 · 81 阅读 · 0 评论 -
[并发编程]ConcurrentModificationException
ConcurrentModificationException: 并发修改异常,在多线程中同时读和写,容易出现这种异常。异常示例:ArraryList是线程不安全的,同时读和写就容易出现异常ConcurrentModificationException。当我们注释掉写的步骤“list.add(“a”);”只留下读的步骤,不会出现这个异常。当我们注释掉写的步骤“System.out.println(list);”只留下写的步骤,也不会出现这个异常。那么只要让读和写不同时进行就可以解决该异常。解决方原创 2022-06-30 22:33:17 · 130 阅读 · 0 评论 -
[多线程]多线程售票遇到售出负票和死锁
用三个线程模拟三个售票员售票。可能出现的问题:1.出现余票为负数。2.出现死锁(类似死锁)。Test类:出现余票为负数资源类:运行结果:解决方式:这种情况是在进行if判断时,三个线程的余票判断都为2。但是往下走时是同步的,第一个线程执行结束后,为余票为1。第二个线程结束为0,第三个线程结束余票则为0–为-1。方式:在进入同步代码块之后再进行一个if(surplusTicket.........原创 2022-06-29 23:07:16 · 346 阅读 · 0 评论 -
[多线程]线程池
使用线程池的背景:线程的经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。使用线程池的思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回线程池中。避免频繁创建销毁,实现重复利用。类似生活中的公共交通工具。优点:提高响应速度。降低资源消耗。便于线程管理。ExecutorService和ExecutorsExecutorService:真正的线程池接口。常见子类ThreadPoolExecutor。Executors:工具类、线程池的工厂类,用于创原创 2022-05-04 09:40:05 · 58 阅读 · 0 评论 -
[多线程]线程协作两种方式管程法与信号灯法
管程法:A类线程将生产好的数据放入缓冲区,B类线程从缓冲区拿出数据。该方法需要定义一个缓冲区,用缓冲区存放共享资源,管理共享资源。以下为代码示例:public class ProducerConsumer { public static void main(String[] args) { SynContainer synContainer = new SynContainer(); Producer producer = new Producer(synCo原创 2022-05-04 09:25:55 · 143 阅读 · 0 评论 -
[多线程]线程协作
什么是线程协作?线程协作指不同线程驱动的任务相互依赖,依赖一般就是对共享资源的依赖;有线程协作一定会有资源共享,有共享就有竞争,有竞争就会有线程安全问题;但是synchronized与lock只能实现线程同步,并不能实现线程的协作。而实现线程协作,则需要wait()与notify()方法。wait与notifywait():表示线程一直等待,直到其他线程通知,与sleep不同,它会释放锁。wait(long timeout):指定等待的毫秒数。notify():唤醒一个处于等待状态的线程。n原创 2022-05-03 22:39:56 · 179 阅读 · 0 评论 -
[多线程]lock锁
什么是lock锁?在多线程应用中,为了实现线程同步,用到了锁的概念,比较常用的是synchronized关键字,但是synchronized是隐式锁,那么在jdk5.0开始,出现了显示定义同步锁对象实现同步。这个显示锁就是lock锁,可以显示的加锁和释放锁。lock锁的使用java.util.concurrent.locks.lock接口是控制多个线程对共享资源进行访问的工具。锁提供了对共享资源的独占访问,每次只能有一个线程对lock对象加锁,线程开始访问共享资源之前应先获得lock对象。Reenta原创 2022-05-03 22:25:46 · 507 阅读 · 0 评论 -
[多线程]死锁
死锁什么是死锁?多个线程各自独自占有一些共享资源,并且互相等待其他线程占有的资源才能运行,而导致两个或多个线程都等待对方释放资源,都停止执行的情况,这就是死锁。某一同步块同时拥有“两个以上对象的锁“时,就可能发生死锁问题。产生死锁的四个必要条件?互斥条件:一个资源每次只能被一个进程使用。请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺。循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。如何预防死锁?原创 2022-05-03 22:06:50 · 54 阅读 · 0 评论 -
[多线程]Synchronized锁定的对象解析
Java中关于Synchronized在不同情况下锁定的对象的解析。原创 2022-04-18 22:27:44 · 330 阅读 · 0 评论 -
[多线程]Java多线程创建的三种方式
本文阐述了Java多线程的三种创建方式,分别式继承Thread类、实现runnable接口、实现callable接口原创 2022-04-15 19:35:26 · 300 阅读 · 0 评论