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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1.  表示速度很慢、因为之前在忙一个考试,今天刚刚考完。以后会更加努力。  
     今晚看了线程的、就稍微做下总结吧,看过的就当复习。
---------------------------------------------------------------------------------

创建线程的第一种方式:继承Thread类。
步骤:
1,定义类继承Thread。
2,复写Thread类中的run方法。
        目的:将自定义代码存储在run方法。让线程运行。
3,调用线程的start方法,
        该方法两个作用:启动线程,调用run方法。

class a extends Thread
{
     public void run(){}
}
//主方法调用  a a=new a();     a.start();
-------------------------------------------------------
创建线程的第二种方式:实现Runable接口
步骤:
1,定义类实现Runnable接口
2,覆盖Runnable接口中的run方法。
        将线程要运行的代码存放在该run方法中。

3,通过Thread类建立线程对象。
4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
        为什么要将Runnable接口的子类对象传递给Thread的构造函数。
        因为,自定义的run方法所属的对象是Runnable接口的子类对象。
        所以要让线程去运行指定对象的run方法。就必须明确该run方法所属对象。
5,调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。

class a implements Runnable
{
        public void run(){}
]
.//主函数调用    a a=new a();             Thread t1 = new Thread(a);               a.start();
-----------------------------------面试注意------------------------------
实现方式和继承方式有什么区别呢?

实现方式好处:避免了单继承的局限性。
在定义线程时,建立使用实现方式。

两种方式区别:
继承Thread:线程代码存放Thread子类run方法中。
实现Runnable,线程代码存在接口的子类的run方法。
-----------------------------------------------------------------------
多线程执行懒汉士正确代码:
//懒汉式
class Single
{
        private static Single s = null;
        private Single(){}
        public static  Single getInstance()
        {
                if(s==null)
                {
                        synchronized(Single.class)//此处的类为类的字节码文件对象  本类类名.class 因为方法为静态
                        {
                                if(s==null)
                                        //--->A;
                                        s = new Single();
                        }
                }
                return s;
        }
}
-------------------------------------------

1 个回复

倒序浏览
  呵呵 总结的还蛮到位的额。不错,加油!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马