首页 新闻 搜索 专区 学院

java多线程thread

0
[待解决问题]

package my;

public class extendsT {

public static void main(String[] args) {
        new ticketwindow().start();   //不能访问类型extendsT的封闭实例。
        new ticketwindow().start();
        new ticketwindow().start();
        new ticketwindow().start();

}
class ticketwindow extends Thread{
    private int tickets=100;
    public void run() {
        while(true) {
            if(tickets>0) {
                    Thread th=Thread.currentThread();
                    String name=th.getName();
                    System.out.println(name+"发货"+tickets--+"张票");
            }
        }
    }
}

}
//为什么执行不了啊 大神可以解释一下吗 而且new ticketwindow().start();有点不好理解

老萌新51的主页 老萌新51 | 菜鸟二级 | 园豆:210
提问于:2019-11-18 17:02
< >
分享
所有回答(2)
0

ticketwindow不应该和main方法同级别,应该放到extendsT类外

yytxdy | 园豆:1154 (小虾三级) | 2019-11-18 17:13

请问一下有哪些写extendsT外啊,什么写里面,搞的我好晕啊,书上也没明说。。

支持(0) 反对(0) 老萌新51 | 园豆:210 (菜鸟二级) | 2019-11-18 17:17

@老萌新51:
public class Test {
public static void main(String[] args) {
new ticketwindow().start(); //不能访问类型extendsT的封闭实例。
new ticketwindow().start();
new ticketwindow().start();
new ticketwindow().start();
}
}
class ticketwindow extends Thread{
private int tickets=100;
public void run() {
while(true) {
if(tickets>0) {
Thread th=Thread.currentThread();
String name=th.getName();
System.out.println(name+"发货"+tickets--+"张票");
}
}
}
}

支持(0) 反对(0) yytxdy | 园豆:1154 (小虾三级) | 2019-11-18 17:26
0

new ticketwindow().start()可以理解为
ticketwindow tic = new ticketwindow();
tic.start();
这个类继承了线程类 实现了run方法 它现在就是一个线程对象 start是启动线程 只是写法简化了一下 没用参数接收 这样一句句写和那个一样的 唯一不同的是用对象接收了一下

Thread在jdk1.8支持的lambda表达式写着会简化很多 可以这样写
private int tickets = 0;
new Thread((Runable) () -> {
//具体实现代码
while(true) {
if(tickets<100) {
System.out.println(Thread.currentThread().getName();+"发货第"+tickets--+"张票");
}else return;
}).start();

黄子琪 | 园豆:211 (菜鸟二级) | 2019-11-19 22:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册