摘要:
代码示例: package pojo.xc01;public class MyRunnable implements Runnable { @Override public void run() { //编写线程锁执行的代码 for (int i = 1; i <= 3; i++) { System 阅读全文
posted @ 2023-10-28 22:29
1stzz1
阅读(25)
评论(0)
推荐(0)
摘要:
线程池 主要核心原理: ① 创建一个池子,池子中是空的 ② 提交任务时,池子会创建新的线程对象来执行任务,当任务执行完毕,线程会还给池子,下回再次提交任务时,不需要创建新的线程,直接复用已有的线程即可 ③ 但是如果提交任务时,池子中没有空闲线程,并且也无法创建新的线程的时候,任务就会排队等待 线程池 阅读全文
posted @ 2023-10-28 22:13
1stzz1
阅读(23)
评论(0)
推荐(0)
摘要:
Java 的虚拟机当中没有定义运行状态,因为当线程抢夺到 CPU 执行权的时候,虚拟机会把当前线程交给操作系统管理,虚拟机就不管了。 阅读全文
posted @ 2023-10-28 15:51
1stzz1
阅读(19)
评论(0)
推荐(0)
摘要:
Java的阻塞队列(Blocking Queue)可以用来实现等待唤醒机制,其中等待和唤醒的操作在队列的不同方法中体现: 1.等待: 在阻塞队列中,等待通常发生在以下情况: 2.当队列为空时,消费者线程试图从队列中取出元素时,它会被阻塞,直到队列中有元素可供消费。这种等待是通过阻塞队列的take() 阅读全文
posted @ 2023-10-28 15:41
1stzz1
阅读(103)
评论(0)
推荐(0)
摘要:
等待唤醒机制还可以用 阻塞队列的方式进行实现 练习:利用阻塞队列完成生产者和消费者(等待唤醒机制)的代码 细节:生产者和消费者必须使用同一个阻塞队列 阻塞队列的创建方式(泛型:队列里面数据的类型):ArrayBlockingQueue<String> queue = new ArrayBlockin 阅读全文
posted @ 2023-10-28 15:36
1stzz1
阅读(75)
评论(0)
推荐(0)
摘要:
在Java中,"生产者-消费者"(Producer-Consumer)是一种常见的并发编程模型,用于协调多个线程之间的工作,其中一些线程充当生产者,而其他线程充当消费者。这模型通常用于处理共享数据的情况,其中生产者线程生成数据并将其放入共享缓冲区,而消费者线程则从缓冲区中取出数据并进行处理。主要特点 阅读全文
posted @ 2023-10-28 14:57
1stzz1
阅读(158)
评论(0)
推荐(0)
摘要:
在Java中,wait()和notify()方法必须在同步块或同步方法内部使用,通常在锁对象上调用,有以下原因: 1.互斥性: 当你在同步块内部使用wait()和notify()方法时,它们与锁对象紧密相关,确保在调用wait()和notify()时能够维持互斥性。这意味着在调用wait()时,当前 阅读全文
posted @ 2023-10-28 14:57
1stzz1
阅读(253)
评论(0)
推荐(0)
摘要:
package pojo.xc01;public class Cook extends Thread{ @Override public void run() { while (true) { synchronized (Desk.lock) { if (Desk.count == 0) break 阅读全文
posted @ 2023-10-28 14:47
1stzz1
阅读(30)
评论(0)
推荐(0)
摘要:
等待唤醒机制的三个角色:生产者、消费者、控制生产者和消费者的第三者 代码: package pojo.xc01;//用来控制生产者和消费者的执行public class Desk { //桌子上是否有面条(0:没有面条 1:有面条) //用布尔类型表示的话有一个小弊端,因为布尔类型只有两个值,只能控 阅读全文
posted @ 2023-10-28 14:31
1stzz1
阅读(35)
评论(0)
推荐(0)
摘要:
生产者和消费者完整的执行过程: 等待唤醒机制: 在Java中,等待唤醒机制是通过Object类的wait()、notify()和notifyAll()方法来实现的。这种机制通常用于多线程之间的协作,允许线程在某个条件满足或者发生变化之前等待,并在条件满足时被唤醒。 1.wait()方法: 当一个线程 阅读全文
posted @ 2023-10-28 13:22
1stzz1
阅读(84)
评论(0)
推荐(0)
摘要:
当一个线程尝试获取一个已经被其他线程锁住的锁时,它的行为取决于所使用的编程语言和锁的类型。一般情况下,有以下几种可能的行为: 1.阻塞等待:线程会被阻塞,直到锁变为可用。这是最常见的情况,通常用于互斥锁。在Java中,可以使用synchronized关键字或ReentrantLock类来实现这种行为 阅读全文
posted @ 2023-10-28 13:06
1stzz1
阅读(109)
评论(0)
推荐(0)
浙公网安备 33010602011771号