多线程的实现方式有两种:
1.继承Thread类
2.实现了runnable接口
其实在Thread类内部也是实现了Runnable的接口的,写写代码印象更加深刻下面请看:
//继承Thread类
package endual;
public class MyThread extends Thread{
public void run() {
System.out.println("Hello word") ;
}
}
Main的测试类:
package endual;
public class MainThreadApp {
public static void main(String[] args) {
MyThread t = new MyThread() ;
t.start() ; //这边用的是start(),可不要用run啊
}
}
实现借口的
package endual;
public class MyThread2 implements Runnable{
public void run() {
System.out.println("Hello word") ;
}
}
main的测试类
package endual;
public class MainApp2 {
public static void main(String[] args) {
/*
* 还记得我们实现了接口不
* 首先定义一个接口然后去实现这个接口
*/
Runnable rnn = new MyThread2() ;
Thread tt = new Thread(rnn) ;
tt.start() ;
}
}
这样是最基本的创建线程的两种方法。
下面我们来看给线程取名字:我们用的setName和getName的方法。
取名字的话,可以在线程开始前,和线程运行的时候取名字的,但是
我们约定了,要在线程开始前个线程取名字的,并且不要改变jvm线程的名字哦。
package endual;
public class MainApp2 {
public static void main(String[] args) {
/*
* 还记得我们实现了接口不
* 首先定义一个接口然后去实现这个接口
*/
Runnable rnn = new MyThread2() ;
Thread tt = new Thread(rnn) ;
tt.setName("我是线程1") ;
tt.start() ;
//tt.setName("我是线程1") ;不要这样取名字,请在start()前面取名字
}
}
这边还有一个知识点就是start()这个方法的启动的时刻哦。
start()方法同志线程规划器这个新线程已经准备好了,而且应当在规划器的最
方便的时候调用这个线程的run()方法的,因为多线程编程的非确定性,程序员不可能确定线程何时会开始的,只知道调用start()是在说明要马上启动线程了。
这也是我这个笔记想强调的一点。