笔记,线程的等待,生产者和消费者
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();
}
}
}
}
}
进程 是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间
线程 是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行. 一个进程最少 有一个线程 线程实际上是在进程基础之上的进一步划分,一个进程启动之后,里面的若干执行路径又可以划分 成若干个线程
以上是关于笔记,线程的等待,生产者和消费者的主要内容,如果未能解决你的问题,请参考以下文章