多线程练习题&多线程模拟龟兔赛跑

使用多线程的方法来实现龟兔赛跑问题,使用语言:JAVA 使用JAVA创建多线程,并解决龟兔赛跑问题 阅读详情

1.你和你女朋友公用一张银行卡,你向银行卡中存取、你女朋友取钱!

package com.qf.zy1;

public class BankCard {
	private int money;

	public int getMoney() {
		return money;
	}

	public void setMoney(int money) {
		this.money = money;
	}
	
	
}

package com.qf.zy1;
/**
 * 取钱
 * @author Administrator
 *
 */
public class GetMoney implements Runnable {
	private BankCard card;
	
	public GetMoney(BankCard card) {
		this.card = card;
	}

	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
				if(card.getMoney()>=1000) {
					synchronized (card) {
						card.setMoney(card.getMoney()-1000);
						System.out.println(Thread.currentThread().getName()+"取出1000元,余额为"+card.getMoney());
						
					}
				}else {
					System.out.println("余额不足,请充值...");
					i--;
				}
		}
		
	}

}

package com.qf.zy1;
/**
 * 存钱
 * @author Administrator
 *
 */
public class SaveMoney implements Runnable{
	private BankCard card;
	public SaveMoney(BankCard card) {
		this.card = card;
	}

	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			synchronized (card) {
				card.setMoney(card.getMoney()+1000);
				System.out.println(Thread.currentThread().getName()+"存入1000元,余额是"+card.getMoney());
			}
		}
		
	}


}

package com.qf.zy1;
/**
 * 1.你和你女朋友公用一张银行卡,你向银行卡中存取、你女朋友取钱!
 * @author Administrator
 *
 */
public class Test {
	public static void main(String[] args) {
		BankCard card=new BankCard();
		SaveMoney save=new SaveMoney(card);
		GetMoney get=new GetMoney(card);
		Thread boy=new Thread(save, "boy");
		Thread girl=new Thread(get, "girl");
		boy.start();
		girl.start();
	}
}

2.设计两个线程,一个线程负责求出1~10以内所有的偶数;然后,另外一个线程负责打印1~10以内所有的奇数。
      测试时,分别设置线程的优先级,观察执行的顺序。

package com.qf.zy2;

public class EvenNumber implements Runnable{

	@Override
	public void run() {
		for (int i = 2; i <=10; i+=2) {
			System.out.println(Thread.currentThread().getName()+i);
		}
		
	}

}

package com.qf.zy2;

public class OddNumber implements Runnable{

	@Override
	public void run() {
		for (int i = 1; i <=10; i+=2) {
			System.out.println(Thread.currentThread().getName()+i);
		}
		
	}

}

package com.qf.zy2;


/**
 * 2.设计两个线程,一个线程负责求出1~10以内所有的偶数;然后,另外一个线程负责打印1~10以内所有的奇数。
 * 测试时,分别设置线程的优先级,观察执行的顺序。
 * @author Administrator
 *
 */
public class Test2 {

	public static void main(String[] args) {
		
		Thread even=new Thread(new EvenNumber(), "偶数");
		Thread odd=new Thread(new OddNumber(),"奇数");
		even.setPriority(Thread.MAX_PRIORITY);
		odd.setPriority(Thread.MIN_PRIORITY);
		even.start();
		odd.start();
	}

}

3.贵妇正在看电视连续剧《芈月传》,从第1~88集,看到第10集时,来了一个送快递的,贵妇收完快递后后,继续看电视。

package com.qf.zy3;

public class Courier implements Runnable{

	@Override
	public void run() {
		System.out.println(Thread.currentThread().getName()+":签收快递!");
		
	}

}

package com.qf.zy3;
/**
 * 3.贵妇正在看电视连续剧《芈月传》,从第1~88集,看到第10集时,来了一个送快递的,贵妇收完快递后后,继续看电视。
 * @author LXM
 * @time:2020年3月21日上午11:04:40
 */
public class Woman {

	public static void main(String[] args) throws InterruptedException {
		Thread courier=new Thread(new Courier(),"快递员");
		for (int i = 1; i <=88; i++) {
			System.out.println("贵妇看电视连续剧《芈月传》,看到了第"+i+"集!");
			if(i==10) {
				courier.start();
				courier.join();
			}
		}
	}

}

4.多线程模拟龟兔赛跑:
    乌龟和兔子进行1000米赛跑,兔子前进5米,乌龟只能前进1米。
    但兔子每20米要休息500毫秒,而乌龟是每100米休息500毫秒。
    谁先到终点就结束程序,并显示获胜方

package com.qf.zy4;

public class Rabbit implements Runnable{
	@Override
	public void run() {
		for (int i = 5; i <=1000; i+=5) {
			System.out.println("兔子前进5米,兔子一共跑了"+i+"米!");
			if(i==1000) {
				System.out.println("比赛结束!兔子胜利");
				System.exit(0);
			}
			if(i%20==0) {
				try {
					System.out.println("兔子共跑了"+i+"米,休息500毫秒!");
					Thread.sleep(500);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		
	}

}

package com.qf.zy4;

public class Tortoise implements Runnable{
	@Override
	public void run() {
		for (int i = 1; i <=1000; i++) {
			System.out.println("乌龟前进1米,乌龟共跑了"+i+"米!");
			if(i==1000) {
				System.out.println("比赛结束!乌龟胜利");
				System.exit(0);
			}
			if(i%100==0) {
				try {
					System.out.println("乌龟共跑了"+i+"米,休息500毫秒!");
					Thread.sleep(500);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		
	}

}

package com.qf.zy4;
/**
 * 乌龟和兔子进行1000米赛跑,兔子前进5米,乌龟只能前进1米。
 * 但兔子每20米要休息500毫秒,而乌龟是每100米休息500毫秒。
 * 谁先到终点就结束程序,并显示获胜方
 * @author LXM
 * @time:2020年3月21日上午11:17:24
 */
public class Test {
	public static void main(String[] args) {
		
		Thread rabbit=new Thread(new Rabbit(), "兔子");
		Thread tortoise=new Thread(new Tortoise(), "乌龟");
		System.out.println("比赛开始!");
		rabbit.start();
		tortoise.start();
	}
}

5.编写多线程应用程序,模拟多个人通过一个山洞的模拟。这个山洞每次只能通过一个人,每个人通过山洞的时间为5秒,随机生成10个人,同时准备过此山洞,显示一下每次通过山洞人的姓名

package com.qf.zy5;

public class GuoShangDong implements Runnable {
	public Object ob=new Object();
	@Override
	public void run() {
		synchronized (ob) {
			try {
				System.out.println(Thread.currentThread().getName()+"进入山洞");
				Thread.sleep(5000);
				System.out.println(Thread.currentThread().getName()+"通过山洞");
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		
	}
	
}

package com.qf.zy5;

import java.util.HashSet;
import java.util.Set;

/**
 * 5.编写多线程应用程序,模拟多个人通过一个山洞的模拟。这个山洞每次只能通过一个人,每个人通过山洞的时间为5秒,
 * 随机生成10个人,同时准备过此山洞,显示一下每次通过山洞人的姓名
 * @author LXM
 * @time:2020年3月23日
 */
public class Test5 {
	public static void main(String[] args) {
		String[] peos={"张","王","李","赵","田","诸葛","孙","付","任","陈"};
		Set<String> peoslist=new HashSet<String>();
		for (String s : peos) {
			peoslist.add(s);
		}
		GuoShangDong p=new GuoShangDong();
		for (String s : peoslist) {
			Thread t=new Thread(p, s);
			t.start();
		}
	}
}

6. 铁道部发布了一个售票任务,要求销售1000张票,要求有5个窗口来进行销售,请编写多线程程序来模拟这个效果
i.    窗口001正在销售第1000张票
ii.    窗口001正在销售第999张票
iii.    窗口002正在销售第998张票
iv.    。。。
v.    窗口05正在销售第1张票
vi.    票已经销售完毕

package com.qf.zy6;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class ShowTickets implements Runnable{
private int ticket=1000;
Lock l=new ReentrantLock();

	@Override
	public void run() {
		while(true) {
			try {
				l.lock();
				if(ticket>0) {
					System.out.println(Thread.currentThread().getName()+"号窗口正在售第"+ticket+"张票");
					ticket--;
				}else {
					System.out.println(Thread.currentThread().getName()+"号窗口票已售完!");
					break;
				}
				
			} finally {
				l.unlock();
			}
		}
		
	}

}

package com.qf.zy6;
/**
 * 6. 铁道部发布了一个售票任务,要求销售1000张票,要求有5个窗口来进行销售,请编写多线程程序来模拟这个效果
i.	窗口001正在销售第1000张票
ii.	窗口001正在销售第999张票
iii.	窗口002正在销售第998张票
iv.	。。。
v.	窗口05正在销售第1张票
vi.	票已经销售完毕
 * @author LXM
 * @time:2020年3月23日
 */
public class Test6 {
	
	public static void main(String[] args) {
		ShowTickets t=new ShowTickets();
		
		for(int i=1;i<=5;i++) {
			Thread a=new Thread(t,i+"");
			a.start();
		}
		
	}
}

7. 计算任务,一个包含了2千个整数的数组,分拆了多个线程来进行并行计算,最后汇总出计算的结果。

package com.qf.zy7;

public class Calculate implements Runnable{
	public int[] nums;
	public int start;
	public int end;
	public int sum=0;
	

	public Calculate(int[] nums, int start, int end) {
		this.nums = nums;
		this.start = start;
		this.end = end;
	}


	@Override
	public void run() {
		for (int i = start; i < end; i++) {
			sum+=nums[i];
		}	
			
		
	}
	
}
package com.qf.zy7;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 7. 计算任务,一个包含了2千个整数的数组,分拆了多个线程来进行并行计算,最后汇总出计算的结果。
 * @author LXM
 * @time:2020年3月23日
 */
public class Test7 {
	public static void main(String[] args) {
		int[] nums=new int[2000];
		for (int i = 0; i < nums.length; i++) {
			nums[i]=i+1;
		}
		System.out.println("请输入拆分几个线程进行计算");
		Scanner input=new Scanner(System.in);
		int count=input.nextInt();
		
		int len=nums.length/count;
		List<Calculate> clist=new ArrayList<Calculate>();
		List<Thread> tlist=new ArrayList<Thread>();
		for (int i = 0; i < count; i++) {
			if(i==count-1) {
				Calculate c=new Calculate(nums, i*len, nums.length);
				clist.add(c);
				Thread t=new Thread(c);
				tlist.add(t);
				t.start();
			}else{
				Calculate c=new Calculate(nums, i*len, (i+1)*len);
				clist.add(c);
				Thread t=new Thread(c);
				tlist.add(t);
				t.start();
			}
		}
		for (Thread t : tlist) {
			try {
				t.join();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		int a=0;
		for (Calculate c : clist) {
			a+=c.sum;
		}
		System.out.println(a);
	}
}

【多线程学习】龟兔赛跑 一、文章描述: 使用多线程知识,模拟龟兔赛跑 实现Runnable接口,创建多线程 规定赛道的长度100米,兔子每前进十步,其所在线程睡眠1毫秒 二、程序代码: package com.test; /** * @data 2020/5/26 - 17:40 * @target 模拟龟兔赛跑---&gt; 多线程 */ public class Race implements Runnable { //比赛获胜者 private String winner = null; 阅读详情

相关推荐

多线程实现龟兔赛跑

多线程

m0_62762208的博客 674

龟兔赛跑(多线程练习题)

1.龟兔赛跑新规:&#13; 规则:龟兔同时起步,终点为100米,兔子跑步的能力强,乌龟跑步的能力弱(优先级的设置)&#13; 途中:  1.兔子跑到40米的时候,看不见乌龟小睡10毫秒,醒来接着跑      2.兔子跑到80米的时候,还是看不见乌龟,再等等他,接着跑      3.兔子跑到100米到达终点&#13; 4.乌龟从一开始...

泰斗贤若如的博客 1108

线程:模拟龟兔赛跑

线程:模拟龟兔赛跑 package com.peng.demo01; //模拟龟兔赛跑 public class Race implements Runnable{ private static String winner; @Override public void run() { for (int i = 0; i &lt;=100 ; i++) { //模拟兔子休息 if(Thread.currentTh

moqiupeng的博客 381

Java:多线程实现龟兔赛跑(一)

题目 实现龟兔赛跑,使用多线程来完成 要求: 1、采用Math.random()取得0~1之间的随机数模拟比赛进程 2、总距离为100米, 3、在随机数0~0.3之间代表兔子跑 ,每次跑2米 4、在随机数0.3~1之间代表乌龟跑,每次跑1米 5、先跑完100米者为胜利者 思路 定义一个类继承Thread类,并重写里面的run方法 1、定义一个boolean类型的值flag记录比赛结果 2、定义一个distance表示比赛进程 3、重写run方法 run方法里面的内容为 1、使用while循环保证重复

lalala_dxf的博客 7642

用74LS160和74LS194搭个复古流水灯:从Multisim仿真到面包板实战(附完整电路图)

本文详细介绍了如何使用74LS160和74LS194芯片搭建复古流水灯电路,从Multisim仿真到面包板实战的全过程。通过解析核心器件特性、提供完整材料清单、仿真验证电路逻辑,以及实际搭建中的布局规划和调试技巧,帮助电子爱好者掌握这一经典数字电路设计项目。

weixin_28736355的博客 388

Geant4 案例分析(一): B1

本文是对Geant4 B1的案例分析,其中特定的功能不做介绍,而注重于各个文件的主要功能,以及它们组织的方式。

m0_51809467的博客 1583

基础编程题目集 7-22 龟兔赛跑 (20 分) 简单容易理解

备注版: #include &lt;stdio.h&gt; int main () { int T,dt,i;int dr=0;//dt是distance tortoise的缩写,dr是distance rabbit,个人习惯不同谅解一下,i作为一个时钟计算时间,一个i就是一分钟 scanf("%d",&amp;T); for(i=1;i&lt;=T;i++)//正序算时间,这里for是为了计算兔子的路程 { dt=i*3;//这里是为了和兔子的路程比对,不是最终乌龟的路程,乌龟路程随i的改变而改变 d

m0_51711089的博客 506

深度学习分类任务中,正负样本比例失衡的5种实战解决方案(附代码)

本文深入探讨了深度学习分类任务中正负样本比例失衡的5种实战解决方案,包括智能采样技术、动态数据增强、损失函数工程、模型架构创新和训练策略优化。针对信用卡欺诈检测、医疗诊断等场景,提供了详细的代码实现和评估方法,帮助开发者有效解决样本不平衡问题,提升模型在真实场景中的表现。

h9j8k7l6m5n的博客 426

Java多线程之线程池的使用及模拟实现

本篇博客主要介绍Java库里提供的创建线程池的方法和线程池的一些优点、工厂模式的简单介绍,ThreadPoolExecutor类构造方法参数的详细介绍,以及线程池的拒绝策略,还有模拟实现一个线程池等。

m0_64986499的博客 960

别再怕DRIVER_VERIFIER_DMA_VIOLATION蓝屏:手把手教你用WinDbg分析IOMMU与驱动冲突

本文深入解析DRIVER_VERIFIER_DMA_VIOLATION蓝屏错误,从IOMMU原理到实战排错,手把手教你使用WinDbg分析驱动冲突。通过理解DMA与IOMMU的核心机制、搭建分析环境、解读DMAR表与设备拓扑,最终定位问题驱动并提供解决方案,帮助开发者和IT运维人员有效应对此类系统崩溃问题。

weixin_30298497的博客 803

【ANSYS APDL】提取结构刚度矩阵完整过程--附Python代码实现

ANSYS的结构刚度矩阵提取中一些操作技巧

m0_61038364的博客 1万+

Java多线程——模拟龟兔赛跑的场景

题目分析 1. 编写龟兔赛跑多线程程序,设赛跑长度为100米,先完成的一方胜利。 2. 兔子要休眠一段时间,但是跑步速度更快,乌龟不休眠,但是速度慢. 3. 编写兔子和乌龟类 RabbitAndTurtle继承Thread.然后编写逻辑. 4. 使用Thread的sleep(long milis)方法使线程休眠来控制兔子休眠时间. 5. 用Math.random()方法或setPrior...

Kluadias的博客 4335

【项目案例】前后端分离项目 【Web图书管理系统 】SpringBoot + Vue + Element UI + Mysql

Web图书管理系统

激流丶的博客 5397

Java控制台实现《多线程模拟龟兔赛跑》(实现Runnale接口,重写run()方法)

本篇博客主要详细的讲到Java的《多线程模拟龟兔赛跑》。其中用到的多线程的实现方法之一——实现Runnable接口,重新run()方法。主要提到了依赖Thread类的new Thread(Runnable target),利用Thread.start()方法抢占时间片,再执行内部的run()方法,内部的run()方法传参为实现Runnable接口的实例对象。然后提到了join()方法,此方法的作用很多,可以让主线程去等待两个调用join()的线程.....

岁岁岁平安的博客 1271

第33次CCF-CSP认证考试 第一题 词频统计 满分题解

本人小白一枚,抱着学习的态度想到网上找一些csp的参考答案,但由于实力有限,大佬的代码大都看不太懂,于是萌生了想用一些简单,基础的语句完成csp前两题的想法并公开,以便与像我这样实力不强的同学交流学习,如有更好的建议,还请斧正,感谢!

qq_75242106的博客 1869

Transformer实战(33)——高效自注意力机制

在本节中,我们学习了如何在硬件资源受限的情况下减轻运行大模型的负担,介绍了高效的稀疏 Transformer 模型,通过近似技术(如 Linformer、BigBird 和 Performer) 用稀疏矩阵替代全自注意力矩阵。并观察它们在各种基准测试中的表现,例如计算复杂度和内存复杂度。结果表明,这些方法可以在不牺牲性能的情况下将平方级复杂度降低到线性复杂度。

盼小辉丶的博客 3084

Java多线程练习题

文章目录使用多线程,模拟龟兔赛跑的场景。编写一个有两个线程的程序,第一个线程用来计算2~100000之间的素数的个数,第二个线程用来计算100000~200000之间的素数的个数,最后输出结果。使用多线程实现多个文件同步复制功能,并在控制台显示复制的进度,进度以百分比表示。例如:把文件A复制到E盘某文件夹下,在控制台上显示“XXX文件已复制10%”,“XXX文件已复制20%”……“XXX文件已复制...

一望红尘的博客 4193

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

一段模拟龟兔赛跑的多线程代码

一段模拟龟兔赛跑的多线程代码

jgfyyfd的博客 576

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Java多线程--模拟龟兔赛跑

在这种方式下,可以多个线程共享同一个目标对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。(2)在Thread类有Thread.sleep()方法,来控制兔子的睡眠时间,可以尝试使用不同的睡眠时间来让乌龟赢还是兔子赢。System.out.println("兔子跑完" + i + "米");System.out.println("乌龟跑完"+i+"米");System.out.println("我的线程...");

2301_76890677的博客 1831

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java多线程模拟龟兔赛跑,JAVA多线程模拟龟兔赛跑

JAVA多线程模拟龟兔赛跑!class Rabbit extends Thread{Tortoise tor;int Journey;int RabbitSpeed;public Rabbit(int rs,int j,Tortoise tortoise){Journey = j;RabbitSpeed = rs;tor = tortoise;}synchronized public void r...

weixin_39958019的博客 321

多线程模拟一下龟兔赛跑的情景

【代码】多线程模拟一下龟兔赛跑的情景。

m0_65136981的博客 695

玩转java多线程 之多线程实践 模拟龟兔赛跑

多线程实践一下 首先需要有一个赛道距离,离终点越来越近 判断比赛是否结束 打印出比赛胜利者 龟兔赛跑开始 兔子睡觉,用sleep方法模拟 乌龟赢得比赛 直接看代码: package duoxiancheng; //模拟龟兔赛跑 public class Race implements Runnable{ //胜利者 private static String winner; @Override public void run() { for (int i

weixin_45806131的博客 442

多线程模拟龟兔赛跑游戏

多线程模拟龟兔赛跑游戏。

小郑要做干饭人的博客 3608

Java_多线程_简单模拟龟兔赛跑

package cn.thread; /** * 简单模拟龟兔赛跑,旨在理解多线程 * @author Chill Lyn * */ public class Racer implements Runnable { private String arrival; private int distance; @Override public void run() { bool...

Chill Lyn 560

java多媒体龟兔赛跑_Java多线程——模拟龟兔赛跑的场景

题目分析1. 编写龟兔赛跑多线程程序,设赛跑长度为100米,先完成的一方胜利。2. 兔子要休眠一段时间,但是跑步速度更快,乌龟不休眠,但是速度慢.3. 编写兔子和乌龟类 RabbitAndTurtle继承Thread.然后编写逻辑.4. 使用Thread的sleep(long milis)方法使线程休眠来控制兔子休眠时间.5. 用Math.random()方法或setPriority控制双方线优先...

weixin_36353849的博客 750

简单的实现java多线程——龟兔赛跑

题目: 实现龟兔赛跑 提示:可以采用Math.random()取得0~1之间的随机数模拟比赛进程, 如总距离为100米,在随机数00.3之间代表兔子跑,每次跑2米,在0.31之间代表乌龟跑,每次跑1 米,先跑完100米者为胜利者 结构: Race类:产生RabbitAndTurtle的两个实例,分别代表兔子和乌龟 RabbitAndTurtle类:继承Thread类,实现赛跑的逻辑 代码实现: Rabbit类 package ch08; public class Rabbit extends Thread

Utaha_的博客 2171
上一篇: Java中有6大设计原则&饿汉式单例模式&懒汉式单例模式&生产者和消费者模式
下一篇: 线程池学习总结
Java_LXM
博客等级 码龄7年 39粉丝 32原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值