Java多线程实现(Runnable接口实现多线程)
Thread类的核心功能是进行线程的启动,直接继承Thread类造成问题的是单继承局限,java中另一种实现模式:Runnable接口。
先观察此接口定义:
@FunctionalinterfacePublic interface Runnable{Public void run();}接口存在着run()方法,与Thread相同,接口子类必须覆写run()方法。
二、范例
范例:利用Runnable定义线程主体类。
Class MyThread implements Runnable{//是一个线程的主体类Public MyThread(String title){this.title=title;}@Override
Public void run(){//所以的线程从此处开始执行for(int x=0;x<10;x++){System.out.printin(this.title+”,x=”+x);}}
MyThread类继承不再是Thread类,实现Runnable,解决了单继承,start()方法不被继承,需要关注Thread类提供的构造方法。
构造方法:
public Thread(Runnable target),接收Runnable接口对象。
范例:启动多线程。
Public class TestDemo{
Public static void main(String[]args){
MyThread mt1=new MyThread(“线程A”);
MyThread mt2=new MyThread(“线程B”);
MyThread mt3=new MyThread(“线程C”);
new Thread(mt1).start();
new Thread(mt2).start();
new Thread(mt3).start();
此时启动多线程,多线程的启动永远都是Thread类的start()方法。注意Runnable接口对象可以采用匿名内部类或Lambda表达式进行定义。
范例:通过匿名内部类定义操作。
Package cn.mldn.demo;Public class TestDemo{Public static void main(String{} args) {New Thread(new Runnable(){@Override Publicvoid run(){System.out.printin(“Hello World!”);}}).start();}}
范例:使用Lambda表达式。
Package cn.mldn.demo;Public class TestDemo{Public static void main(String{} args) {new Thread(()-> System.out.printin(“Hello World!”)).start();}}
在实际开发中,Runnable接口子类定义形式很少出现,以上操作做法最为常见。