Java-多线程
文章平均质量分 70
JAVA多线程相关知识和代码
沙河板混
这个作者很懒,什么都没留下…
展开
-
【Java】实现一个自己的线程池
上文中我们讲了,这里我们来讲一下如何简单实现一个自己的线程池。原创 2023-11-27 17:13:54 · 488 阅读 · 0 评论 -
【Java】ThreadPoolExecutor类参数简述
ThreadPoolExecutor类继承自AbstractExecutorService类,而AbstractExecutorService实现了ExecutorService接口ThreadPoolExecutor类是Executor类中重要的实现类。原创 2023-11-27 15:48:55 · 1013 阅读 · 0 评论 -
【Java】线程池的简单使用
Java当中,为了规避频繁创建调度进程的开销,我们引入了线程。但是如果进一步提高创建销毁频率,线程的开销也不容忽视。对此我们有两个解决方案· 协程(轻量级线程):相比线程,把系统调度的过程省略了。· 线程池:在使用第一个线程的时候,提前把其余线程创建好。后续如果想使用新的线程,不必重新创建,可以直接用。(使用池中的线程比创建线程更高效的原因是:创建线程涉及到内核态操作(操作系统内核会给所有线程提供服务),过程是不可控的)在Java当中,我们更常用的是线程池方案线程池的优点有。原创 2023-11-26 17:32:22 · 528 阅读 · 0 评论 -
【Java】实现一个自己的定时器
上文讲了怎样使用Java自带的定时器这篇博客就来讲如何来编写一个自己实现的定时器。原创 2023-11-26 16:06:39 · 1417 阅读 · 0 评论 -
【Java】定时器的简单应用
在写代码的过程中,如果我们遇到了隔一段时间就要进行一项任务时,采用定时器会提高我们的效率。下面对定时器的使用进行简单说明。原创 2023-11-23 16:26:31 · 113 阅读 · 0 评论 -
【Java】实现阻塞队列-生产者/消费者模型
上文中我们讲了Java库中自带的阻塞队列,并且讲了如何用阻塞队列来实现生产者消费者模型下面我们来讲如何用代码实现一个阻塞队列。原创 2023-11-22 17:25:53 · 179 阅读 · 0 评论 -
【Java】用Java库中自带的阻塞队列以及用阻塞队列实现生产者-消费者模型
首先我们来认识一下什么是堵塞队列阻塞队列即实现了线程安全和阻塞的队列。在队列为空时,获取元素的线程会等待队列存放元素变为非空;在队列满时,存放元素的线程会等待队列取出元素变为不满。阻塞队列常应用于生产者-消费者模型我们常用的阻塞队列主要有两类使用LinkedBlockingDeque使用ArrayBlockingQueue。原创 2023-11-22 16:50:53 · 69 阅读 · 0 评论 -
【Java】多线程-单例模式/volatile-指令重排序
当我们在new一个对象的时候,new这个过程分为三步1.申请内存空间2.在内存空间上构造对象 (构造方法)3.把内存的地址,赋值给 instance 引用这个过程可以按照123来执行,也可以按照132的顺序来执行在我们上述优化过的代码中,如果T1线程在new的过程中按照132的顺序来执行,那么在执行到第二步时,恰好T2第一次对instance进行判断,由于instance已经创建了实例,那么T2会直接返回这个没有构造对象的instance。原创 2023-11-21 17:23:48 · 376 阅读 · 0 评论 -
【Java】多线程-wait/notify
Java的多线程中,线程的执行顺序和时间都是不定的。为了控制线程的调度顺序,前面我们引入了join()方法。但是join()只能在线程执行完后,才能执行其他线程,有没有什么方法可以在线程执行顺序中来调度其他线程呢?这里我们引入了wait()和notify()方法wait()、notify()和notifyAll()都是属于Object类中的方法,任何对象都可以调用这几个方法wait()/wait(time):让当前进程进入阻塞状态notify()/notifyAll():唤醒当前对象上等待的对象。原创 2023-11-20 17:02:01 · 178 阅读 · 0 评论 -
【Java】volatile-内存可见性问题
要明白什么是内存可见性,我们首先来看一段代码运行结果如下打开jconsole,查看thread1状态,发现thread1还在运行状态,也就是说thread1中的while循环还一直在继续为什么会这样呢?原创 2023-11-18 17:42:45 · 354 阅读 · 0 评论 -
【Java】线程状态
对象已经创建,但start 方法还没调用.: Thread 对象还在,内核中的线程已经没了: 就绪状态(线程已经在 cpu 上执行了/线程正在排队等待上 cpu 执行): 阻塞.由于 sleep 这种固定时间的方式产生的阻塞.: 阻塞.由于 wait 这种不固定时间的方式产生的阻塞.:阻塞.由于锁竞争导致的阻塞.(死锁)原创 2023-11-20 17:31:45 · 52 阅读 · 0 评论 -
【Java】线程等待 join()方法
join方法的作用是让一个线程等待另一个线程执行结束,再继续执行。调用t.join的线程会被阻塞,一直阻塞到t线程执行结束为止。原创 2023-11-12 17:01:21 · 54 阅读 · 0 评论 -
【Java】线程安全-synchronized用法
在IDE中运行下面的多线程代码两个线程各加5000,最终得到的结果应该是10000我们运行第一次,得到的结果是并不是10000。我们再运行第二次,得到:也不是10000这是怎么回事呢?原创 2023-11-16 18:00:31 · 82 阅读 · 0 评论 -
【Java】【死锁】可重入琐-synchronized
针对同一个线程,一个对象,连续加锁两次时,由于第一次加锁释放后,才能进行第二次加锁。这里我们第一次加锁后,要到括号2的位置才进行释放;而不执行第二次加锁便代码便不能执行到括号2的位置。因此便产生了死锁。为了解决这个问题,我们引入了可重入琐。原创 2023-11-17 16:34:13 · 53 阅读 · 0 评论 -
【Java】【死锁】多线程死锁问题
两个线程,两把锁产生死锁的代码实例运行上述代码,由于发生死锁,运行不出结果产生死锁的原因是:一开始,线程1拿到了locker1的琐,线程2拿到了locker2的琐接着,线程1想拿到locker2,此时线程2还没有释放locker1;与此同时,线程2想拿locker1,而线程1还没有释放locker1两个线程在这里发生僵持,便产生了死锁。原创 2023-11-17 16:47:49 · 45 阅读 · 0 评论