1. 如何在java中实现多线程
java中实现多线程有两种方式
(1)继承Thread类
(2)实现Runnable接口
其中java.lang.Thread 类也 实现了Runnable 接口,实现了Run方法。
2.分析两种实现方式哪一种更优
实现Runnable 优于继承Thread类,原因有以下:
(1)java 类只能继承一个,但是却能实现多个接口,所以以实现接口的方式更灵活;
(2)在面向对象的程序设计中,继承多用给对象添加属性,而不是使用里面的方法。如果单纯需要覆盖里面的run方法,使用接口更好。
3. start() 与 run()的区别
(1)使用start() 时启动新的线程,在新的线程中执行run()
(2)使用run()时不启动新的线程,在主线程中执行run()
(3)连续调用两次或者多次start()方法会抛出IllegalThreadStateException,但是连续调用多次run()却不会抛出异常,只相当于普通方法的调用。
结论:无论通过继承Thread 类 还是实现Runnable 接口 使用多线程,都需要最终调用start()方法才能真正创建新的线程。
4. 代码示例
public class ThreadAndRunnable {
@Test
public void test(){
for(int i =0;i<10;i++){
Thread myThread = new MyThread();
//此时启动新的线程,在新的线程中执行run()
myThread.start();
//此时不启动新的线程,在main中执行run()
//myThread.run();
//----连续调用start()
myThread.start();
myThread.start();
System.out.println(Thread.currentThread().getName() + " ....");
}
}
@Test
public void test1(){
Thread myThread = new Thread(new MyRunnable());
myThread.start();
System.out.println(Thread.currentThread().getName() + " ....");
}
}
//java 中类只能继承一个
class MyThread extends Thread{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+ " start thrad");
}
}
//java中接口可以实现多个
class MyRunnable implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " start runnable");
}
}