java基础第八天_多线程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础第八天_多线程相关的知识,希望对你有一定的参考价值。

1. 5辆汽车过山洞,依次经过山洞。每辆车通过山洞花费10秒,使用多线程实现。

2. 用多线程模拟蜜蜂和熊的关系。

   蜜蜂是生产者,熊是消费者。蜜蜂生产蜂蜜是累加的过程,熊吃蜂蜜是批量(满100吃掉)的过程。

   生产者和消费者之间使用通知方式告知对方。注意不能出现死锁的现象。


1. 5辆汽车过山洞,依次经过山洞。每辆车通过山洞花费10秒,使用多线程实现。

class Car extends Thread{

private String name;

private static Object lock=new Object();

public Car(String name){

this.name=name;

}

public void run(){

//同步锁  表示同一时刻只能一个线程执行

synchronized(lock){

System.out.println(name +"汽车准备进山洞了");

try {

//大于10秒

Thread.sleep(1500);

}

catch(Exception e){

}

System.out.println(name +"汽车已经出山洞了");

}

}

}

class ThreadDemo11{

public static void main(String[] args){

Car c1=new Car("a");

Car c2=new Car("b");

Car c3=new Car("c");

Car c4=new Car("d");

Car c5=new Car("f");

c1.start();

c2.start();

c3.start();

c4.start();

c5.start();

}

}


2. 用多线程模拟蜜蜂和熊的关系。

   蜜蜂是生产者,熊是消费者。蜜蜂生产蜂蜜是累加的过程,熊吃蜂蜜是批量(满100吃掉)的过程。

   生产者和消费者之间使用通知方式告知对方。注意不能出现死锁的现象。

package com.it18zhang_08.job.demo;


//

public class HoneyDemo{

public static void main(String[] args){

java.util.List<Integer> list = new java.util.ArrayList<Integer>();

Bee p = new Bee(list,"kk");

Bear c1 = new Bear(list,"");

//启动生产者和消费者

p.start();

c1.start();

}

}


//生产者

class Bee extends Thread{

final static int MAX = 100 ;

java.util.List<Integer> list ;

String name ;

public Bee(java.util.List<Integer> list,String name){

this.list = list ;

this.name = name ;

}

//放置数据

public void run(){

int i = 1 ;

while(true){

//对集合进行同步

synchronized(list){

int size = list.size();

if(size >= MAX){

try{

list.wait();

}

catch(Exception e){}

}

else{

list.add(new Integer(i));

System.out.println("P : " + i);

i ++ ;

list.notify();

}

}

}

}

}

//消费者

class Bear extends Thread{

java.util.List<Integer> list ;

String name ;

public Bear(java.util.List<Integer> list,String name){

this.list = list ;

this.name = name ;

}

//取数据

public void run(){

while(true){

synchronized(list){

int size = list.size();

//集合为空

if(size >= 100){

System.out.println("C size : " + size);

list.removeAll(list);

//通知等待队列中的线程。

list.notify();

}

else{

try{

list.wait();

}

catch(Exception e){}

}

}

}

}

}


本文出自 “作业” 博客,请务必保留此出处http://10718270.blog.51cto.com/10708270/1774162

以上是关于java基础第八天_多线程的主要内容,如果未能解决你的问题,请参考以下文章

IT十八掌作业_java基础第八天_多线程

IT十八掌作业_java基础第八天_多线程

Java基础第八天听课总结--多线程&Thread

Java基础学习第八天

java基础第八天

No_16_0229 Java基础学习第八天