阅读以下程序段,找出错误并改正 public class Test implements Thread{ public static void main(String args[]){ Test t = new Test(); Thread tt = new Thread(t); tt.start(); } public void run(){ for(int i=0;i<5;i++){ System.out.println("i="+i); } } }
时间: 2023-12-03 16:04:16 浏览: 120
以下是错误并改正后的代码:
```
public class Test implements Runnable {
public static void main(String args[]) {
Test t = new Test();
Thread tt = new Thread(t);
tt.start();
}
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("i=" + i);
}
}
}
```
错误:
1. 实现线程需要实现 Runnable 接口而不是 Thread 类。
2. 在 main 方法中创建线程时应传入实现了 Runnable 接口的实例而不是 Thread 类的实例。
改正:
1. 将 `implements Thread` 改为 `implements Runnable`。
2. 将 `Test t = new Test();` 改为 `Runnable t = new Test();`。
相关问题
阅读以下程序段,找出错误并分析 public class Test implements Thread{ public static void main(String args[]){ Test t = new Test(); Thread tt = new Thread(t); tt.start(); } public void run(){ for(int i=0;i<5;i++){ System.out.println("i="+i); } } }
该程序段存在以下几个错误:
1. 类Test实现了Thread接口,但实际上应该是扩展Thread类或实现Runnable接口。
2. 在创建Thread对象时,应该将Test对象作为参数传入Thread的构造方法中,而不是将Test对象直接赋值给Thread类型的引用变量。
下面是修正后的程序:
```
public class Test extends Thread {
public static void main(String args[]){
Test t = new Test();
t.start();
}
public void run(){
for(int i=0;i<5;i++){
System.out.println("i="+i);
}
}
}
```
在修正后的程序中,Test类继承了Thread类,并重写了run()方法。在main()方法中,创建了Test对象t,并调用了其start()方法启动线程。在run()方法中,打印了5次"i="加上循环变量i的值。
package test1; public class Main { public static void main(String[] args) { T t = new T(); new Thread(t,"窗口1").start(); new Thread(t,"窗口2").start(); new Thread(t,"窗口3").start(); new Thread(t,"窗口4").start(); } } class T implements Runnable{ private static int num=200; @Override public void run() { while(true) { synchronized (T.class) { if (num <= 0) break; try { Thread.sleep(100); } catch (InterruptedException e) { throw new RuntimeException(e); } System.out.println(Thread.currentThread().getName() + "出售了一张票," + "剩余票数为" + (--num)); } } } } 分析这段代码
这段代码为多线程售票程序,创建了4个线程模拟4个窗口售票。在T类中,使用synchronized关键字对num进行同步,避免了多个线程同时对同一个变量进行操作导致数据不一致的问题。当num小于等于0时,线程停止运行。
具体分析如下:
1. Main类中通过创建T对象,以及四个线程对象,调用start方法启动线程,实现了多线程售票。
2. T类实现了Runnable接口,重写了run方法。在run方法中使用while循环,保证线程不停止。
3. 使用synchronized关键字同步num变量,保证多个线程对num变量的访问是有序的,避免出现数据不一致的情况。
4. 在每个线程售出一张票时,使用--num操作减少num变量的值,表示售出一张票。
5. 最后当num小于等于0时,退出循环,线程停止运行。
阅读全文