Java中创建主线程有两种方法
一、通过继承Thread类
1、创建一个类,让其继承Thread类,然后复写该类的run()方法。
2、建立Thread子类对象的同时,线程也被创建。
3、通过调用子类的start()方法执行该子线程。start()方法在执行时会调用run()方法。
不能直接调用子类run()方法。如果直接调用子类run()方法,则创建的线程没有执行,run()方法仍然实在main()方法这个线程中执行的。
每个线程都有自己独立的编号,默认的表示方式为Thread--标号,标号从0开始。
获取当前线程名称的方法:Thread.currentThread();//返回一个静态Thread类型的值。
二、通过实现Runnable接口
1、定义一个类,并让他implements Runnable接口
2、覆盖Runnable接口中的run()方法。
将线程要运行的代码存放在run()中。
3、通过Thread类建立线程对象。
4、将Runnable接口的子类对象作为实际蚕食传递给Thread类的构造函数。
why?
因为自定义的run()方法所属的对象时Runnable接口的子类对象,所以要让线程去执行制定的对象的run()方法,就必须明确该方法所属对象。
5、通过Thread类的start()方法开启一个子线程。
三、实现Runnable接口方式和继承Thread类方式有什么区别?
实现方式的好处:避免了单继承的局限性。
在定义线程时,建议使用实现方式。
四、在使用多线程的时候容易产生数据安全性问题,可以在可能出现安全性问题的代码块部分使用synchronized关键字,方法一,将这部分代码块放在synchronized的大括号中。
synchronized(this)
{
//代码块
}
方法二、创建synchronized修饰函数,则函数内的代码全都是同步执行。
public synchronized void fun()
{
}