实验4 Java多线程编程

合集下载

java多线程编程实验总结与体会

java多线程编程实验总结与体会

java多线程编程实验总结与体会[Java多线程编程实验总结与体会]本次实验锻炼了我的Java多线程编程能力,让我更深入地了解了多线程编程的实现原理和技巧,同时也让我意识到在多线程环境下需要考虑的问题和注意事项。

下面我将结合具体实验内容,分享我在实践中的体会和思考。

1. 实验环境搭建在进行本次实验之前,我首先进行了实验环境的搭建。

我选择了Java SE Development Kit 8和Eclipse作为开发工具,同时也安装了JDK8的API 文档作为参考资料。

在搭建环境的过程中,我认识到Java的生态系统非常强大,附带的工具和资源也非常充足,这为我们开发和调试带来了很大的便利。

2. 多线程原理在研究多线程编程之前,我们需要对Java语言中的线程概念有一个清晰的认识。

线程是指操作系统能够进行运算调度的最小单位,是执行线程代码的路径。

在Java中,线程是一种轻量级的进程,可以同时运行多个线程。

每个线程都有自己的堆栈和局部变量,线程之间可以共享全局变量。

Java的多线程编程是通过Thread类和Runnable接口来实现的。

在实践中,我发现多线程编程最基本的原理是线程的并发执行。

多个线程可以在同一时间内执行不同的代码,提高CPU利用率,加快程序运行速度。

但是,在多线程并发执行的过程中,我们需要注意线程之间的同步问题,避免出现数据竞争和并发安全等问题。

3. 多线程的实现在Java中,我们可以通过继承Thread类或者实现Runnable接口来创建线程。

对于简单的线程,我们可以采用继承Thread类的方式来实现。

例如,在实验一中,我们在Main线程内创建了两个子线程,分别用来执行奇数和偶数的累加操作。

我们可以分别定义两个类OddThread和EvenThread继承Thread类,分别实现run()方法,用来执行具体的奇数和偶数累加操作。

然后在Main线程内创建OddThread和EvenThread 对象,并调用start()方法来启动两个线程,并等待两个线程完成操作。

java实验报告——多线程

java实验报告——多线程

成绩:面向对象原理与Java实践课程实验报告实验5:多线程姓名 ___ _班级 _____学号 ____实验地点 _实验时间 _____指导教师 ___ __一、实验目的:●了解线程调度机制●理解线程同步机制●掌握线程设计方法二、实验要求:●掌握线程创建的方法●掌握线程的基本控制方法●掌握线程间的同步控制方法三、实验内容: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();}@Overridepublic 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();}}}}六、实验过程中遇到的问题及解决手段:七、本次实验的体会(结论):。

多线程程序实验报告(3篇)

多线程程序实验报告(3篇)

第1篇一、实验目的1. 理解多线程的概念和作用。

2. 掌握多线程的创建、同步和通信方法。

3. 熟悉Java中多线程的实现方式。

4. 提高程序设计能力和实际应用能力。

二、实验环境1. 操作系统:Windows 102. 开发工具:IntelliJ IDEA3. 编程语言:Java三、实验内容本次实验主要完成以下任务:1. 创建多线程程序,实现两个线程分别执行不同的任务。

2. 使用同步方法实现线程间的同步。

3. 使用线程通信机制实现线程间的协作。

四、实验步骤1. 创建两个线程类,分别为Thread1和Thread2。

```javapublic class Thread1 extends Thread {@Overridepublic void run() {// 执行Thread1的任务for (int i = 0; i < 10; i++) {System.out.println("Thread1: " + i);}}}public class Thread2 extends Thread {@Overridepublic void run() {// 执行Thread2的任务for (int i = 0; i < 10; i++) {System.out.println("Thread2: " + i);}}}```2. 创建一个主类,在主类中创建两个线程对象,并启动它们。

```javapublic class Main {public static void main(String[] args) {Thread thread1 = new Thread1();Thread thread2 = new Thread2();thread1.start();thread2.start();}```3. 使用同步方法实现线程间的同步。

```javapublic class SynchronizedThread extends Thread {private static int count = 0;@Overridepublic void run() {for (int i = 0; i < 10; i++) {synchronized (SynchronizedThread.class) {count++;System.out.println(Thread.currentThread().getName() + ": " + count);}}}}public class Main {public static void main(String[] args) {Thread thread1 = new SynchronizedThread();Thread thread2 = new SynchronizedThread();thread1.start();thread2.start();}```4. 使用线程通信机制实现线程间的协作。

Java多线程实验报告

Java多线程实验报告

实验报告课程名称: Java语言程序设计姓名:学号:班级:数学与计算机科学学院数学与计算机科学学院实验报告实验名称:多线程指导教师:日期:if (isPrime)count++;}System.out.println(st + "~" + en + "之间共有" + count + "个质数");}public static void main(String[] args) {UseThread thread1 = new UseThread(2, 1000);UseThread thread2 = new UseThread(1000, 2000);thread1.start();thread2.start();}}第2题代码:public class Experiment14_2 {public static void main(String[] args) {MyThread t1 = new MyThread("T1");MyThread t2 = new MyThread("T2");t1.start();t2.start();System.out.println("活动线程数:" + Thread.activeCount());System.out.println("main()运行完毕");}}class MyThread extends Thread {public MyThread(String s) {super(s);}public void run() {for (int i = 1; i <= 3; i++) {System.out.println(getName() + "第" + i + "次运行");try {sleep((int) (Math.random() * 100));} catch (InterruptedException e) {e.printStackTrace();}}System.out.println(getName() + "结束");}}实验结果第1题第2题:。

【实验】java多线程实验报告

【实验】java多线程实验报告

【关键字】实验java多线程实验报告篇一:西北农林科技大学java多线程实验报告实验7 多线程1.实验目的(1) 掌握Java多线程的概念和实现方法(2) 掌握Java多线程的同步问题2.实验内容任务一:火车售票假设有火车票1000张,创建10个线程模拟10个售票点,每个售票点100毫秒买一张票。

打印出售票过程,注意使用synchronized确保同一张票只能卖出一次。

程序运行结果见左图。

打开EclipseTickets.javapublic class Ticket extends Thread {int ticket =1000; String name =""; public void run(){ while(true){synchronized(name){ if(ticket"第" + Thread.currentThread().getName()+ "售票点卖出了第" + ticket-- + "张票");}} }}} try{ } catch(InterruptedException e){ } Thread.sleep(100);Test.javapublic class Test {} public static void main(String args[]){} Ticket t = new Ticket(); new Thread(t,"1").start(); new Thread(t,"2").start(); new Thread(t,"3").start(); new Thread(t,"4").start(); new Thread(t,"5").start(); new Thread(t,"6").start(); new Thread(t,"7").start(); new Thread(t,"8").start(); new Thread(t,"9").start(); new Thread(t,"10").start();任务二:银行存款假设某家银行,它可接受顾客的汇款,每做一次汇款,便可计算出汇款的总额。

实验4Java多线程编程

实验4Java多线程编程

实验4Java多线程编程
实验4 Java多线程编程
⼀、实验⽬的
1、理解线程概念和定义。

2、掌握创建、管理和控制Java线程对象的⽅法,包括创建Java 线程对象、改变线程状态、设置线程优先级以控制线程调度等⽅法。

3、了解并执⾏的多线程间存在的各种不同关系,掌握实现线程互斥和线程同步的⽅法。

⼆、实验内容
(1)输⼊以下程序,观察输出结果。

(2)输⼊如下程序,观察输出结果。

三、按照要求编写程序
编写基于多线程的素数(是除了⾃⾝和1以外,没有其它素数因⼦的⾃然数)判定程序。

1、待判定的整数经过键盘录⼊后存放在.txt⽂件,
2、整数之间以空格分割
3、创建10个线程从⽂件中取出整数进⾏判定,
4、判定的结果存⼊到另⼀个列表中,⽤户可以通过键盘查询判定的结果。

四、实验结果
写实验报告。

内容包括:
1、习题的运⾏结果,源程序。

2、程序调试中出现的错误提⽰。

(英⽂、中⽂对照)
3、若有没通过的程序,分析原因。

JAVA多线程的实验报告

JAVA多线程的实验报告

JAVA多线程的实验报告深圳大学实验报告课程名称:Java程序设计实验项目名称:线程学院:计算机与软件学院专业:指导教师:谭舜泉报告人:学号:班级:3班实验时间:2021年12月13日实验报告提交时间:2021年12月26日教务部制一、实验内容:8.2.3 吵醒休眠的线程实验代码:class Shop implements Runnable {Thread zhangWorker,wangWorker,boss; Shop() {boss=new Thread(this);//创建boss,Shop对象为boss目标对象zhangWorker=new Thread(this); wangWorker=new Thread(this); zhangWorker.setName(\张工\); wangWorker.setName(\王工\); boss.setName(\老板\); }public void run() {int i=0;if(Thread.currentThread()==zhangWorker) {while(true) {try {i++;System.out.printf(\已搬运了%d箱苹果\\n\,zhangWorker.getName(),i); if(i==3)return;Thread.sleep(*****); }//zhangWorker休眠10秒}catch(InterruptedException e){System.out.printf(\让%s继续工作\,boss.getName(),zhangWorker.getName());} } }else if(Thread.currentThread()==wangWorker) {while(true) {try{i++;System.out.printf(\已搬运了%d箱香蕉\\n\,wangWorker.getName(),i); if(i==3) return;Thread.sleep(*****); }catch(InterruptedException e){System.out.printf(\让%s继续工作\,boss.getName(),wangWorker.getName());} } }else if(Thread.currentThread()==boss) {while(true) {zhangWorker.interrupt();//吵醒zhangWorker wangWorker.interrupt();if(!(wangWorker.isAlive()||zhangWorker.isAlive())) {System.out.printf(\下班\,boss.getName()); return; } } } } }public class ShopExample {public static void main(String args[]) {Shop shop=new Shop();shop.zhangWorker.start(); shop.wangWorker.start(); shop.boss.start(); } }实验截图:8.2.4 排队买票实验代码:class TicketSeller//负责卖票的类{int fiveNumber=1,tenNumber=0,twentyNumber=0;public synchronized void sellTicket(int receiveMoney,int buyNumber) {if(receiveMoney==5) {fiveNumber=fiveNumber+1;System.out.printf(\给我5元钱,这是您的1张入场券\,Thread.currentThread().getName()); }else if(receiveMoney==10buyNumber==2) {tenNumber=tenNumber+1;System.out.printf(\给我10元钱,这是您的2张入场券\,Thread.currentThread().getName()); }else if(receiveMoney==10buyNumber==1) {while(fiveNumber1)//给出线程等待的条件{try {System.out.printf(\靠边等\,Thread.currentThread().getName()); wait();//线程进入等待状态System.out.printf(\结束等待状态\\n\,Thread.currentThread().getName()); }catch(InterruptedException e){} }fiveNumber=fiveNumber-1; tenNumber=tenNumber+1;System.out.printf(\给我10元钱,找您5元钱,这是您的1张入场券\,Thread.currentThread().getName()); }else if(receiveMoney==20buyNumber==1) {while(fiveNumber1||tenNumber1)//给出线程需要等待的条件{ try {System.out.printf(\靠边等\,Thread.currentThread().getName()); wait();//线程进入等待状态System.out.printf(\结束等待\,Thread.currentThread().getName()); }catch(InterruptedException e){} }fiveNumber=fiveNumber-1; tenNumber=tenNumber-1;twentyNumber=twentyNumber+1;System.out.printf(\给我20元钱,找您一张5元和一张10元,这是您的1张入场券\,Thread.currentThread().getName()); }else if(receiveMoney==20buyNumber==2) {while(tenNumber1)//给出线程等待的条件{try {System.out.printf(\靠边等\\n\,Thread.currentThread().getName()); wait();//线程进入的等待状态System.out.printf(\结束等待\,Thread.currentThread().getName()); }catch(InterruptedException e){} }tenNumber=tenNumber-1;twentyNumber=twentyNumber+1;System.out.printf(\给我20元钱,找您一张10元,这是您的2张入场券\,Thread.currentThread().getName()); }notifyAll();//通知等待的线程结束等待} }class Cinema implements Runnable {Thread zhao,qian,sun,li,zhou; TicketSeller seller; Cinema() {zhao=new Thread(this); qian=new Thread(this); sun=new Thread(this); li=new Thread(this); zhou=new Thread(this); zhao.setName(\赵\); qian.setName(\钱\); sun.setName(\孙\); li.setName(\李\); zhou.setName(\周\);seller=new TicketSeller(); }public void run() {if(Thread.currentThread()==zhao) seller.sellTicket(20,2);else if(Thread.currentThread()==qian) seller.sellTicket(20,1);else if(Thread.currentThread()==sun) seller.sellTicket(10,1);else if(Thread.currentThread()==li) seller.sellTicket(10,2);else if(Thread.currentThread()==zhou) seller.sellTicket(5,1); } }public class SaleExample {public static void main(String args[]) {Cinema cinema=new Cinema(); cinema.zhao.start(); try {Thread.sleep(1000); }catch(InterruptedException e){} cinema.qian.start(); try {Thread.sleep(1000); }catch(InterruptedException e){} cinema.sun.start(); try {Thread.sleep(1000); }catch(InterruptedException e){} cinema.li.start(); try {Thread.sleep(1000); }catch(InterruptedException e){}cinema.zhou.start(); } }实验截图:二、实验体会:对于实验“吵醒睡眠的线程”,让我更熟悉了interrupt()方法的使用,interrupt()方法常用来“吵醒”休眠的线程。

java多线程的实验报告

java多线程的实验报告

java多线程的实验报告Java多线程的实验报告一、引言多线程是计算机科学中一个重要的概念,它可以提高程序的并发性和效率。

Java作为一种广泛应用的编程语言,也提供了丰富的多线程支持。

本实验旨在通过编写多线程程序,探索Java多线程的特性和使用方法。

二、实验目的1. 理解多线程的概念和原理;2. 掌握Java多线程的基本使用方法;3. 分析多线程程序的执行过程和效果。

三、实验过程1. 创建多线程在Java中,可以通过继承Thread类或实现Runnable接口来创建多线程。

本实验选择实现Runnable接口的方式。

首先,定义一个实现了Runnable接口的类MyThread,重写run()方法,在该方法中编写线程的具体逻辑。

2. 启动多线程在主线程中,创建MyThread对象,并通过Thread类的构造函数将其作为参数传入。

然后,调用Thread类的start()方法启动线程。

3. 线程同步在多线程程序中,为了避免线程之间的数据竞争和冲突,需要进行线程同步。

Java提供了synchronized关键字和Lock接口来实现线程同步。

本实验使用synchronized关键字来保证线程的安全性。

4. 线程通信多线程之间的通信可以通过共享变量、wait()和notify()方法来实现。

本实验通过共享变量来实现线程通信,其中一个线程负责生产数据,另一个线程负责消费数据。

5. 线程池Java提供了Executor框架来管理线程池。

通过使用线程池,可以减少线程的创建和销毁开销,提高程序的性能。

本实验使用Executor框架来管理线程池,并设置合适的线程数量。

四、实验结果通过以上实验过程,成功实现了多线程程序,并观察到了以下结果:1. 多线程的执行顺序是不确定的,不同线程的执行顺序可能不同;2. 多线程程序可以提高程序的并发性和效率;3. 线程同步能够保证多线程程序的安全性;4. 线程通信可以实现多线程之间的数据交换和协作;5. 使用线程池可以提高程序的性能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验4 Java多线程编程
一、实验目的
1、理解线程概念和定义。

2、掌握创建、管理和控制Java线程对象的方法,包括创建Java 线程对象、改变线程状态、设置线程优先级以控制线程调度等方法。

3、了解并执行的多线程间存在的各种不同关系,掌握实现线程互斥和线程同步的方法。

二、实验内容
(1)输入以下程序,观察输出结果。

(2)输入如下程序,观察输出结果。

三、按照要求编写程序
编写基于多线程的素数(是除了自身和1以外,没有其它素数因子的自然数)判定程序。

1、待判定的整数经过键盘录入后存放在.txt文件,
2、整数之间以空格分割
3、创建10个线程从文件中取出整数进行判定,
4、判定的结果存入到另一个列表中,用户可以通过键盘查询判定的结果。

四、实验结果
写实验报告。

内容包括:
1、习题的运行结果,源程序。

2、程序调试中出现的错误提示。

(英文、中文对照)
3、若有没通过的程序,分析原因。

相关文档
最新文档