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);

Thread源码-----传实现了Runnable接口的类的实例给Thread的作用

/**
 * 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 ");
	}
}

Thread源码-----传实现了Runnable接口的类的实例给Thread的作用
这里mt 是实现了Runnable接口的类MYThread的实例,把它传给Thread的构造函数,在Thread内run()方法就可以通过接口引用变量target来调用MYThread实现的run()方法了。

而如果是继承Thread来创建进程的话,调用的run()就是子类重写的run()方法了