1. 通过实现Runnable方式实现一个线程类CharRunnable,其成员变量为char printChar;在main方法中创建26个线程,每个线程输出从a到z中的1个字母。 2. 通过继承Thread方式编写多线程应用程序,模拟多人通过一个山洞。这个山洞每次只能通过一个人,每个人通过山洞的时间为5~10秒的随机整数秒,给定5个人,同时准备过此山洞,显示每次通过山洞人的姓名、过山洞的序号、开始过山洞的时间、过山洞花费的时间、出山洞的时间。 //Cave,CaveThread类实现了按线程互斥方式通过山洞,在此基础上修改为同步方式CaveSync、CaveThreadSync,保证按所有人按顺序通过山洞 String[] pNames = { "张三", "李思", "王武", "柳柳", "周琦" };
时间: 2024-02-21 16:56:35 浏览: 82
Java多线程-创建多线程的基本方式二:实现Runnable接口
好的,我会回答您的问题。
第一个问题,您可以参考以下代码实现:
```java
public class CharRunnable implements Runnable {
private char printChar;
public CharRunnable(char printChar) {
this.printChar = printChar;
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + ": " + printChar);
}
public static void main(String[] args) {
for (char i = 'a'; i <= 'z'; i++) {
new Thread(new CharRunnable(i)).start();
}
}
}
```
第二个问题,您可以参考以下代码实现:
```java
public class CaveThread extends Thread {
private static Object lock = new Object();
private static int index = 1;
private String name;
public CaveThread(String name) {
this.name = name;
}
@Override
public void run() {
synchronized (lock) {
int time = (int) (Math.random() * 6) + 5;
System.out.println(name + "开始通过山洞,过山洞序号为" + index + ",开始时间为" + new Date());
try {
Thread.sleep(time * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(name + "通过山洞完成,花费时间为" + time + "秒,结束时间为" + new Date());
index++;
}
}
public static void main(String[] args) {
String[] pNames = {"张三", "李思", "王武", "柳柳", "周琦"};
for (String name : pNames) {
new CaveThread(name).start();
}
}
}
```
其中,使用了synchronized关键字来实现同步,保证了每个人按顺序通过山洞。
阅读全文