Thread源码-----传实现了Runnable接口的类的实例给Thread的作用
传送门:https://wangchangchung.github.io/2016/12/05/Java常用类源码——Thread源码解析/
1、
thread的构造函数有:
public Thread( );
public Thread(Runnable target);
public Thread(String name);
public Thread(Runnable target, String name);
public Thread(ThreadGroup group, Runnable target);
public Thread(ThreadGroup group, String name);
public Thread(ThreadGroup group, Runnable target, String name);
public Thread(ThreadGroup group, Runnable target, String name, long stackSize);
/**
* If this thread was constructed using a separate
* <code>Runnable</code> run object, then that
* <code>Runnable</code> object's <code>run</code> method is called;
* otherwise, this method does nothing and returns.
* <p>
* Subclasses of <code>Thread</code> should override this method.
*
* @see #start()
* @see #stop()
* @see #Thread(ThreadGroup, Runnable, String)
*/
@Override
public void run() {
if (target != null) {
target.run();
}
}
2、分析
例如:
class MYThread implements Runnable{
private String thrdName;
MYThread(String name)
{
thrdName = name;
}
public void run()
{
System.out.println(thrdName + " starting");
try {
for(int count = 0; count < 10; count++)
{
Thread.sleep(400);
System.out.println("IN" + thrdName + ", count is " + count);
}
}catch(InterruptedException exc)
{
System.out.println(thrdName + " interrupted ");
}
System.out.println(thrdName + " terminating ");
}
}
class useThreads
{
public static void main(String []args)
{
System.out.println("Main thread starting");
MYThread mt = new MYThread("Child #1");
Thread newThrd = new Thread(mt);
newThrd.start();
for(int i = 0; i< 50; i++)
{
System.out.print(".");
try {
Thread.sleep(200);
}catch(InterruptedException exc)
{
System.out.println("Main thread interrupted");
}
System.out.print("21");
}
System.out.println(newThrd.getName());
System.out.println("Main thread " + " terminating ");
}
}
这里mt 是实现了Runnable接口的类MYThread的实例,把它传给Thread的构造函数,在Thread内run()方法就可以通过接口引用变量target来调用MYThread实现的run()方法了。
而如果是继承Thread来创建进程的话,调用的run()就是子类重写的run()方法了