Java作业-十个人过山洞(多线程)

这篇博客探讨了一个Java多线程问题——如何模拟十个人依次通过山洞的情景。文章中展示了通过设置线程名字来确保清晰的线程标识,并承认自己在多线程方面尚不熟练,期待读者提供指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标效果:


代码:

package Eight;

import java.util.Random;

/**
 * 编写多线程程序,模拟多个人通过一个山洞。
 * 这个山洞每次只能通过一个人,每个人通过山洞的时间为1秒(sleep)。
 * 随机生成10个人,都要通过此山洞,用随机值对应的字符串表示人名,打印输出每次通过山洞的人名。
 * 提示:利用线程同步机制,过山洞用一条输出语句表示,该输出语句打印输出当前过山洞的人名,
 * 每个人过山洞对应一个线程,哪个线程执行这条输出语句,就表示哪个人过山洞。

 * @author Vivinia
 *
 */
public class AcrossCave {
	public static void main(String[] args) {
		Cave cave=new Cave();      //实例化一个山洞
		for(int i=0;i<10;i++) {			
			new Thread(cave,getRandomString(6)).start();      //生成字符串立即命名为线程的名字,代表十个人
		}
	}

	private static String getRandomString(int length) {  //length表示生成字符串的长度
		String base="abcdefghijklmnopqrstuvwxyz";  
		Random random=new Random();
		StringBuffer sb=new StringBuffer();   //可以追加字符,单纯的String不可以追加
		for(int i=0;i<length;i++) {
			int number=random.nextInt(base.length());
			sb.append(base.charAt(number));     //追加新生成数字对应的字符
		}
		return sb.toString();     //charAt返回base字符串中下标为number的字符(从0开始),再追加到sb字符串中
	}
}

class Cave implements Runnable{     //山洞类

	@Override
	public synchronized void run() {		
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}finally {
			System.out.println(Thread.currentThread().getName()+"通过了山洞");   //获取当前线程的名字,即为人的名字
		}
	}	
}


我是渣渣,今天复习发现之前的多线程都做错了,我一直在主线程里懵逼来懵逼去:
1.之前一直以为实现Runnable接口方法创建线程,只要调用run方法就是启动线程了,如今才发现我真的好天真,run只是调用那个方法,不管哪种创建线程的方法,启动都要调用start
2.题目要求的是十个人穿越一个山洞,一个一个走,但是我愣是整了十个人一人一个山洞,所以同时走的,坑爹

3.现在是创建线程时直接把生成的字符串当作线程名字,这样一定不会错了,思路比较清晰了


多线程我一直不太会,如果还有错误请大佬留言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值