标签:dstar illegal print lse void missing run extend ...
Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实例。启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,通过自己的类直接extend Thread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。例如:
1 public class MyThread extends Thread { 2 public void run() { 3 System.out.println("MyThread.run()"); 4 } 5 } 6 7 MyThread myThread1 = new MyThread(); 8 MyThread myThread2 = new MyThread(); 9 myThread1.start(); 10 myThread2.start();
这种方式主要的原理就是继承了tread类,当
我们来看一下源码当调用start方法的时候,就会调用start0的方法,而start0有一个native关键字,我们可以理解成当调用start0的时候才去调用了run的方法。
1 public synchronized void start() 2 { 3 boolean flag; 4 if(threadStatus != 0) 5 throw new IllegalThreadStateException(); 6 group.add(this); 7 flag = false; 8 start0(); 9 flag = true; 10 try 11 { 12 if(!flag) 13 group.threadStartFailed(this); 14 } 15 catch(Throwable throwable) { } 16 break MISSING_BLOCK_LABEL_70; 17 Exception exception; 18 exception; 19 try 20 { 21 if(!flag) 22 group.threadStartFailed(this); 23 } 24 catch(Throwable throwable1) { } 25 throw exception; 26 } 27 28 private native void start0();
如果自己的类已经extends另一个类,就无法直接extends Thread,此时,可以实现一个Runnable接口,如下:
1 public class MyThread extends OtherClass implements Runnable { 2 public void run() { 3 System.out.println("MyThread.run()"); 4 } 5 }
为了启动MyThread,需要首先实例化一个Thread,并传入自己的MyThread实例:
1 MyThread myThread = new MyThread(); 2 Thread thread = new Thread(myThread); 3 thread.start()
事实上,当传入一个Runnable target参数给Thread后,Thread的run()方法就会调用target.run(),参考JDK源代码:
1 public void run() { 2 if (target != null) { 3 target.run(); 4 } 5 }
这里应用了典型的回掉函数,A调用B,B在调用A,在定义一个接口定义准则,确定规范。
匿名函数必须要继承父类或者实现接口的。
有时候我们只用一次的话那么就可以用匿名函数了。
1 new Thread() {//创建方式1 2 public void run() { 3 for(int x=0; x<50; x++) { 4 System.out.println(Thread.currentThread().getName()+"....x="+x); 5 } 6 } 7 }.start();
1 new Thread(new Runnable() {//创建方式2 2 public void run() { 3 for(int x=0; x<50; x++) { 4 System.out.println(Thread.currentThread().getName()+"....z="+x); 5 } 6 } 7 }).start();
标签:dstar illegal print lse void missing run extend ...
原文地址:https://www.cnblogs.com/qingruihappy/p/9356917.html