黑马程序员技术交流社区

标题: 关于怎么来定义一个线程(Thread),小结发现了三种方法 [打印本页]

作者: zhouyunfang    时间: 2014-11-25 20:22
标题: 关于怎么来定义一个线程(Thread),小结发现了三种方法
我把我自己感觉有问题的地方写了一下,关于线程的一些实用的东西,供大家参考,一同进步,一起共勉。
一个是实现Runnable接口实现run()方法,一个是new Thread() 实现run() 方法和继承extends Thread 实现run()方法
小例子见笑:

1、继承Thread 实现run()方法
public class ThreadDemo01 {
    public static void main(String[] args) {
        Thread t1 = new Person1();
        Thread t2 = new Person2();
        t1.start();     //启动线程调用start()方法
        t2.start();    //两个线程是异步的,不是同步的。
      
    }
}
class Person1 extends Thread{
    public void run(){
        for(int i = 0;i<1000;i++){
            System.out.println("你是谁");
        }
    }
}
class Person2 extends Thread{
    public void run(){
        for(int i = 0;i<1000;i++){
            System.out.println("我是收电费的");
        }
    }
}

2、实现Runnable接口实现run()方法
public class ThreadDemo02 {
    public static void main(String[] args) {
        Runnable runnable1 = new Runnable1();
        Runnable runnable2 = new Runnable2();
        Thread t1 = new Thread(runnable1);
        Thread t2 = new Thread(runnable2);
        t1.start();
        t2.start();
    }
}
class Runnable1 implements Runnable{
    public void run(){
        for(int i = 0;i<1000;i++){
            System.out.println("你是谁呀");
        }
    }
}
class Runnable2 implements Runnable{
    public void run(){
        for(int i = 0;i<1000;i++){
            System.out.println("我是修电表的");
        }
    }
}
3、new Thread() 实现run() 方法
public class DaemonThreadDemo {
    public static void main(String[] args) {
        Thread rose = new Thread(){
            public void run(){
                for(int i = 0;i<10;i++){
                    System.out.println("rose:let me go");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                System.out.println("rose:啊啊啊啊啊啊AAAAAA");
                System.out.println("扑通");
            }
        };
        Thread jack = new Thread(){
            public void run(){
                while(true){
                    System.out.println("jack:you jump!i jump");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        jack.setDaemon(true);    //设置为后台线程,在写在start()方法之前
        rose.start();
        jack.start();
    }
}
作者: kerner    时间: 2014-11-25 20:40
第三种和第一种是一样的,都是继承Thread类。后者不过是匿名内部类,覆盖了run()方法。
作者: cbb    时间: 2014-11-26 02:29
我是来看第三种的~~~结果!是匿名!不过!楼主加油!嘿嘿
作者: javaAndroid    时间: 2014-11-26 10:44
楼主不要理解错了,其实还是两种,只是你写的有一个是匿名的。
作者: 高昌德    时间: 2014-11-26 11:46
匿名内部了,,,,
作者: LFW    时间: 2014-11-26 12:58
第三个是匿名类、、跟第一个一样的。。
作者: mmppp    时间: 2014-11-26 14:47
匿名 哈哈 还是好想法,nice
作者: huoxy    时间: 2014-11-26 16:24
毕老师在多线程最后的个视频里讲了用匿名内部类实现!如果这算第三种的话,还有第四种,通过实现Runnable接口的匿名内部类也算一种,是吧:lol




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2