码迷,mamicode.com
首页 > 编程语言 > 详细

java基础第八天_多线程

时间:2016-05-17 00:51:44      阅读:127      评论:0      收藏:0      [点我收藏+]

标签: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基础第八天_多线程

标签:java基础 多线程

原文地址:http://10718270.blog.51cto.com/10708270/1774162

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!