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;
}
}
-------------------------------------------
|
|