java线程.doc_java实验报告-多线程.doc

这篇实验报告详细介绍了Java多线程的实践,包括线程调度、同步机制的理解和应用。通过生成随机数并使用线程计算两种排序算法的运行时间,以及模拟水塘注水和排水的线程控制,展示了线程的创建、控制和同步。报告还包含了程序源代码示例,以及实验中遇到问题的解决方法和实验体会。
摘要由CSDN通过智能技术生成

成绩:

面向对象原理与Java实践课程实验报告

实验5:多线程

姓 名 _ __ _

班 级 _____

学 号 ____

实验地点 _

实验时间 _____

指导教师 _ __ __

一、实验目的:

l 了解线程调度机制

l 理解线程同步机制

l 掌握线程设计方法

二、实验要求:

l 掌握线程创建的方法

l 掌握线程的基本控制方法

l 掌握线程间的同步控制方法

三、实验内容:

1、生随机成1万个整数,利用线程技术计算两种不同排序算法对这些数排序的运行时间。

2、有一水塘,可实现注水和排水操作。当水塘无水时不能对其再进行排水操作,当水塘水满时不能对其再进行注水操作。创建水塘类Pond、注水线程Injection和排水线程Drain,假设注水线程可以在10分钟内将水塘注满水,排水线程可以在10分钟内将水塘的水全排出。试实现水塘的注水和排水过程。

四、设计思路:

五、程序源代码:

package pkg_1;

import java.util.Scanner;

public class Demo1

{

public static void main(String[] args)

{

public class RandomNumber implements Runnable {

private final byte[] lock;

private Random random;

private int sum;

public RandomNumber() {

lock = new byte[1];

random = new Random();

}

@Override

public void run() {

while (true) {

int rd = random.nextInt(1001); // 产生0 - 10000的随机数

if (rd == 0) {

continue;

} else {

if (sum >= 10000) {

return;

}

try {

Thread.sleep(1); // 为了效果更明显,当前线程睡1毫秒

} catch (InterruptedException e) {

e.printStackTrace();

}

synchronized (lock) {

if (sum < 10000) {

sum++;

System.out.println(Thread.currentThread().getName()

+ " - 第" + sum + "个随机数:" + rd);

}

}

}

}

}

// main测试函数

public static void main(String[] args) throws Exception {

RandomNumber rn = new RandomNumber();

// 循环产生50个线程

for (int i = 0; i < 50; i++) {

new Thread(rn).start();

}

}

}

}

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

public class Sort {

public static void main(String[] args) {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

while (true) {

System.out.println("请输入数字,以空格分隔:");

try {

String input = br.readLine();

String[] vector = input.split(" ");

int[] num = new int[vector.length];

for (int i = 0; i < vector.length; i++) {

num[i] = Integer.parseInt(vector[i]);

}

for (int j = 0; j < vector.length; j++) {

for (int k = 1; k < vector.length - 1; k++) {

if (num[k] > num[k + 1]) {

int temp = num[k + 1];

num[k + 1] = num[k];

num[k] = temp;

}

}

System.out.print(num[j] + " ");

}

System.out.println();

} catch (NumberFormatException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

六、实验过程中遇到的问题及解决手段:

七、本次实验的体会(结论):

展开阅读全文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值