A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邱石 中级黑马   /  2015-6-15 14:04  /  246 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

多线程的实现方案(掌握)
                A:继承Thread类
                        1,自定义MyThread继承Thread类,
                        2,MyThread类里面重写run()方法,
                                public class MyThread extends Thread{
                                        public void run(){
                                                for(int x=0;x<100;x++){
                                                        System.out.println(x);
                                                }
                                        }
                                }
                        3,创建对象。
                        4,启动线程。
                                public static void main(String[] args){
                                        //创建线程对象
                                        MyThread my1=new MyThread();
                                        MyThread my2=new MyThread();
                                        //调用方法设置名称
                                        my1.setName("线程一");
                                        my2.setName("线程二");
                                        //启动线程
                                        my1.start();
                                        my2.start();
                                       
                                }
                               
                        面试题:run()和start()的区别?
                        run():仅仅是封装被线程执行的代码,直接调用run()方法就是普通方法了。
                        start();首先启动线程,然后再有jvm去调用该线程的run()方法
                B:实现Runnable接口
        总结:实现多线程的两种方式
                方式一:继承Thread类
                        A:自定义MyThread继承Thread类。
                        B:在MyTHread类中重写run()方法。
                        C:创建MyThread类的对象。
                        D:启动线程对象。
                方式二:实现Runable接口
                        A:自定义类MyRunnable实现Runnable接口
                        B:在MyRunnable里面重写run()
                        C:创建MyRunnable类的对象
                        D:创建Thread类的对象,并把C步骤的对象作为构造参数传递,启动线程。
                代码对比
                方式一
                MyThread my1=new MyThread();
                MyThread my2=new MyThread();
                my1.setName("线程一");
                my2.setName("线程二");
                my1.start();
                my2.start();
                方式二
                MyRunnable mr1=new MyRunnable();
                MyRunnable mr2=new MyRunnable();
                Thread t1=new Thread(my1,"线程一")
                Thread t2=new Thread(my2,"线程二")
                t1.start();
                t2.start();
                问题:a,为什么要重写run方法?                run里面封装的是要被线程执行的代码。
                        b,启动线程对象用的是那个方法?          start()。
                        c,run和start方法的区别?             run直接调用仅仅是普通方法,start会先启动线程,再有jvm调用run方法。
                        d,有了方式一问什么还要有方式二呢?
                                1,实现Runable接口可以避免由于java单继承带来的局限性。
                                2,适合多个相同程序的代码去处理同一个资源的情况,把线程同程序代码数据有效分离,降低了耦合性,较好的体现了面向对象的设计思想。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马