Java线程及多线程技术及应用(5)

2018-11-22 21:59

/*** 显示水果筐中水果存放情况*/ public void display() {

for (int i = 0; i < index; i++)

System.out.printf(\

new

DecimalFormat(\

}

}

+ fruits[i].getVariety() + \

for (int i = index; i < fruits.length; i++) { }

System.out.println();

System.out.printf(\【\】 |\

package com.px1987.j2se.thread.ProducerConsumer; import java.util.Random;

/** 果园里的农夫类,他是生产者,实现Runnable接口*/ public class Farmer implements Runnable { }

package com.px1987.j2se.thread.ProducerConsumer; import java.util.Random;

/*** 果园中的小孩类,他是消费者,实现Runnable接口*/ public class Child implements Runnable {

/*** 姓名*/ /** 姓名*/

private String name; /** 水果框*/

private FruitBasket fruitBasket;

/** 农夫会不停地重复这一系列动作:从水果树上采摘一个水果放入水果框中,然后随机的休息0-2public void run() { }

public Farmer(String name, FruitBasket fruitBasket) { }

super();

this.name = name;

this.fruitBasket = fruitBasket; while (true) { }

fruitBasket.push(name, new Fruit()); try { }

Thread.sleep(new Random().nextInt(2000)); e.printStackTrace();

} catch (InterruptedException e) {

秒*/

}

private String name; /*** 水果框*/

private FruitBasket fruitBasket;

/*** 小孩会不停地重复这一系列动作:从水果框中拿出水果吃,然后随机休息0-5秒钟*/ public void run() { }

public Child(String name, FruitBasket fruitBasket) { }

super();

this.name = name;

this.fruitBasket = fruitBasket; while (true) { }

fruitBasket.pop(name); try { }

Thread.sleep(new Random().nextInt(5000)); e.printStackTrace();

} catch (InterruptedException e) {

package com.px1987.j2se.thread.ProducerConsumer; import java.util.Random;

/*** 果园中的小孩类,他是消费者,实现Runnable接口*/ public class Child implements Runnable {

/*** 姓名*/

private String name; /*** 水果框*/

private FruitBasket fruitBasket;

/*** 小孩会不停地重复这一系列动作:从水果框中拿出水果吃,然后随机休息0-5秒钟*/ public void run() { }

public Child(String name, FruitBasket fruitBasket) { }

super();

this.name = name;

this.fruitBasket = fruitBasket; while (true) { }

fruitBasket.pop(name); try { }

Thread.sleep(new Random().nextInt(5)); e.printStackTrace();

} catch (InterruptedException e) {

}

测试时使用多个生产者线程和多个消费者线程

package com.px1987.j2se.thread.ProducerConsumer; /** 果园类,测试*/ public class Orchard { }

public static void main(String[] args) { }

FruitBasket fruitBasket = new FruitBasket();

Thread farmerThread1 = new Thread(new Farmer(\农夫1\Thread farmerThread2 = new Thread(new Farmer(\农夫2\Thread farmerThread3 = new Thread(new Farmer(\农夫3\Thread childThread1 = new Thread(new Child(\小孩1\Thread childThread2 = new Thread(new Child(\小孩2\Thread childThread3 = new Thread(new Child(\小孩3\farmerThread1.start(); farmerThread2.start(); farmerThread3.start(); childThread1.start(); childThread2.start(); childThread3.start();

程序的运行结果如下:

农夫1 向水果框中放入编号为1的苹果

NO:01苹果 | 【2】 | 【3】 | 【4】 | 【5】 | 【6】 | 农夫3 向水果框中放入编号为2的荔枝

NO:01苹果 | NO:02荔枝 | 【3】 | 【4】 | 【5】 | 【6】 | 小孩2 从水果框中拿出编号为2的荔枝

NO:01苹果 | 【2】 | 【3】 | 【4】 | 【5】 | 【6】 | 农夫2 向水果框中放入编号为3的香蕉

NO:01苹果 | NO:03香蕉 | 【3】 | 【4】 | 【5】 | 【6】 | 小孩1 从水果框中拿出编号为3的香蕉

NO:01苹果 | 【2】 | 【3】 | 【4】 | 【5】 | 【6】 | 小孩3 从水果框中拿出编号为1的苹果

【1】 | 【2】 | 【3】 | 【4】 | 【5】 | 【6】 | 农夫2 向水果框中放入编号为4的苹果

NO:04苹果 | 【2】 | 【3】 | 【4】 | 【5】 | 【6】 | 小孩1 从水果框中拿出编号为4的苹果

【1】 | 【2】 | 【3】 | 【4】 | 【5】 | 【6】 | 农夫1 向水果框中放入编号为5的苹果

NO:05苹果 | 【2】 | 【3】 | 【4】 | 【5】 | 【6】 | 农夫3 向水果框中放入编号为6的西瓜

NO:05苹果 | NO:06西瓜 | 【3】 | 【4】 | 【5】 | 【6】 | 农夫2 向水果框中放入编号为7的苹果

NO:05苹果 | NO:06西瓜 | NO:07苹果 | 【4】 | 【5】 | 【6】 | 小孩3 从水果框中拿出编号为7的苹果

NO:05苹果 | NO:06西瓜 | 【3】 | 【4】 | 【5】 | 【6】 | 小孩3 从水果框中拿出编号为6的西瓜

NO:05苹果 | 【2】 | 【3】 | 【4】 | 【5】 | 【6】 | 小孩2 从水果框中拿出编号为5的苹果

【1】 | 【2】 | 【3】 | 【4】 | 【5】 | 【6】 | 农夫2 向水果框中放入编号为8的桃子

NO:08桃子 | 【2】 | 【3】 | 【4】 | 【5】 | 【6】 | 农夫1 向水果框中放入编号为9的荔枝

NO:08桃子 | NO:09荔枝 | 【3】 | 【4】 | 【5】 | 【6】 | 农夫3 向水果框中放入编号为10的香蕉

NO:08桃子 | NO:09荔枝 | NO:10香蕉 | 【4】 | 【5】 | 【6】 | 农夫1 向水果框中放入编号为11的桃子

NO:08桃子 | NO:09荔枝 | NO:10香蕉 | NO:11桃子 | 【5】 | 【6】 | 农夫1 向水果框中放入编号为12的荔枝

NO:08桃子 | NO:09荔枝 | NO:10香蕉 | NO:11桃子 | NO:12荔枝 | 【6】 | 农夫3 向水果框中放入编号为13的西瓜

NO:08桃子 | NO:09荔枝 | NO:10香蕉 | NO:11桃子 | NO:12荔枝 | NO:13西瓜 | 小孩1 从水果框中拿出编号为13的西瓜

NO:08桃子 | NO:09荔枝 | NO:10香蕉 | NO:11桃子 | NO:12荔枝 | 【6】 | 农夫2 向水果框中放入编号为14的西瓜

NO:08桃子 | NO:09荔枝 | NO:10香蕉 | NO:11桃子 | NO:12荔枝 | NO:14西瓜 |

6.7 课后复习题

1、线程的应用示例——继承Thread类

import java.util.*;

public class ThreadExampleOne{ }

class TimeThread extends Thread{

Date nowTime;

public void run(){ //重写run方法

while(true){

nowTime=new Date();

System.out.println(\现在的时间为:\ \try{

sleep(1000);

public static void main(String args[]){ }

TimeThread timeThread = new TimeThread(); timeThread.start();

}

}

}

}

catch(InterruptedException e){ }

System.out.println(e.toString());

2、线程的应用示例——实现Runnable接口

import java.util.*;

public class ThreadExampleTwo{ }

class TimeThread extends Object implements Runnable{ }

Date nowTime;

Thread timeThread=null; public TimeThread(){ }

public void run(){ //重写run方法 }

while(true){ }

nowTime=new Date();

System.out.println(\现在的时间为:\ \try{ }

catch(InterruptedException e){ }

System.out.println(e.toString()); timeThread.sleep(1000);

timeThread=new Thread(this); timeThread.start();

public static void main(String args[]){ }

TimeThread timeThreadObj = new TimeThread();

3、线程优先级的应用示例

class ThreadPriorityDemo extends Thread{

ThreadPriorityDemo(String strName){ }

public void run(){

//打印出当前线程的优先级

System.out.println(this.getPriority()); System.out.println(\线程名称:\

}

}

class PriorityDemo{ }

public static void main(String args[]){ }

ThreadPriorityDemo aThreadDemo = new ThreadPriorityDemo(\aThreadDemo.setPriority(Thread.MAX_PRIORITY); aThreadDemo.start();

ThreadPriorityDemo bThreadDemo = new ThreadPriorityDemo(\bThreadDemo.setPriority(Thread.MIN_PRIORITY); bThreadDemo.start();

ThreadPriorityDemo cThreadDemo = new ThreadPriorityDemo(\cThreadDemo.setPriority(Thread.NORM_PRIORITY); cThreadDemo.start();

ThreadPriorityDemo dThreadDemo = new ThreadPriorityDemo(\dThreadDemo.setPriority(Thread.MIN_PRIORITY); dThreadDemo.start();

ThreadPriorityDemo eThreadDemo = new ThreadPriorityDemo(\eThreadDemo.setPriority(Thread.MIN_PRIORITY); eThreadDemo.start();


Java线程及多线程技术及应用(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:“电子科技大学出版社(周信东主编)”的C语言程序设计实验-整理代

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: