笔记,线程的等待,生产者和消费者

Posted 就今天呐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了笔记,线程的等待,生产者和消费者相关的知识,希望对你有一定的参考价值。

package com.kaikeba.test4_6;


/**
* @Author buxh
* @Date 2021/6/5 23:05
**/
public class task1 {
public static void main(String[] args) {
// 生产和消费
Subject subject = new Subject();
new Teacher(subject).start();
new Student(subject).start();

}

static class Subject{
private String name ;
private boolean flag = true;

public synchronized void satrtClass(String name){
if (flag){
this.name = name;
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(name + "上课了");

flag = false;
this.notifyAll();
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public synchronized void rest(){
if (!flag){
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(name + "下课了");
flag = true;
this.notifyAll();
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

}

static class Student extends Thread{
private Subject subject;
public Student(Subject subject){
this.subject = subject;
}

@Override
public void run() {
for (int i = 0;i<100;i++){
if(i%2==0) {
subject.satrtClass("英语课");
}else {
subject.satrtClass("体育课");
}
}
}
}
static class Teacher extends Thread{
private Subject subject;
public Teacher(Subject subject){
this.subject = subject;
}

@Override
public void run() {

for (int i = 0;i<100;i++) {
try {
Thread.sleep(3000);
subject.rest();

} catch (InterruptedException e) {
e.printStackTrace();
}

}
}
}


}

进程 是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间

线程 是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行. 一个进程最少 有一个线程 线程实际上是在进程基础之上的进一步划分,一个进程启动之后,里面的若干执行路径又可以划分 成若干个线程

以上是关于笔记,线程的等待,生产者和消费者的主要内容,如果未能解决你的问题,请参考以下文章

多线程之Condition的await和signalsignalAll等待/通知机制

多线程的等待唤醒机制之消费者和生产者模式

Java线程的等待与唤醒

多线程之Java中的等待唤醒机制

线程通信Demo

java 学习笔记 生产者与消费者