zoukankan      html  css  js  c++  java
  • 多线程

    对于多线程这一块,今日我就用这个代码给大家做演示,可以先敲出来,对着相应的书籍进行参考。

    最近忙于备考·,所有有很多细节问题就没机会给大家好好解释。请见谅。下面给大家加一张效果图。

    package G1.Thread;

     

    public class ProducerCustomerTest{

     

     

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    LinkTest11 l = new LinkTest11();//实例化了一个计数器对象,在堆区为它分配了一块儿空间。
    Thread t1 = new Thread(new Producer(l));
    Thread t2 = new Thread(new Customer(l));
    t1.start();
    t2.start();
    }

    }

    //可以理解为一个计数器类,记录生产和消费得是第几个馒头,并且包含生产和包装两个方法
    class LinkTest11{
    //记录第几个馒头
    int num;
    //是否有馒头,false是没有馒头
    boolean flag = false;

    //生产得方法
    public synchronized void setNum(int num){
    if(flag){
    System.out.println("A生产者说有馒头了,我得睡一会儿调用了wait()方法打开锁");
    try {
    this.wait();//线程wait以后,锁不归该线程所有。
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    this.num = num;
    System.out.print("A生产者生产了第"+num+"个馒头");
    flag = true;
    System.out.println("A说赶紧起来吃馒头了,叫醒B消费者");
    this.notify();
    }

    //消费得方法
    public synchronized void getNum(){
    if(!flag){
    System.out.println("B消费者说吃的太快没有馒头了,我得睡一会儿调用了wait()方法打开锁");
    try {
    this.wait();
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    System.out.print("B消费者吃了第"+num+"个馒头");
    flag = false;
    System.out.println("B说馒头吃完了,叫醒A生产者做馒头了");
    this.notify();
    }
    }

    class Producer implements Runnable{

    //因为生产者和消费者用得是同一个计数器,所以不能new,所有只能传一个计数器进来
    LinkTest11 l ;
    Producer(LinkTest11 l){
    this.l = l;
    }

    @Override
    public void run() {
    // TODO Auto-generated method stub
    for(int i=1;i<=10;i++){
    l.setNum(i);
    }
    System.out.println("A生产者下班了");
    }

    }


    class Customer implements Runnable{

    //因为生产者和消费者用得是同一个计数器,所以不能new,所有只能传一个计数器进来
    LinkTest11 l ;
    Customer(LinkTest11 l){
    this.l = l;
    }

    @Override
    public void run() {
    // TODO Auto-generated method stub
    for(int i=1;i<=10;i++){
    l.getNum();
    }
    System.out.println("B生产者下班了");
    }

    }

  • 相关阅读:
    leetcode------Clone Graph
    leetcode------Anagrams
    leetcode------Simplify Path
    leetcode------Number of Islands
    leetcode------3Sum Closest
    leetcode------4Sum
    leetcode------3Sum
    leetcode------Binary Tree Right Side View
    leetcode------Word Break
    leetcode------House Robber
  • 原文地址:https://www.cnblogs.com/tianyating/p/9162403.html
Copyright © 2011-2022 走看看