此处仅简单介绍同一任务多线程并行执行时的资源共享,不介绍多线程数据同步。多线程
public class ShareResource extends Thread{ private static int index = 1; private static final int MAX = 50; @Override public void run(){ while(index <= MAX){ System.out.println(index++); } } public static void main(String args[]) { Thread thread1 = new ShareResource(); Thread thread2 = new ShareResource(); thread1.start(); thread2.start(); } }
当建立 ShareThread 的多个实例,并并行执行时,能够经过使用 static 关键字修改类的成员,便可达到多线程下共享资源的惟一性的目的。可是 static 修饰的变量的生命周期很长,若是须要共享的资源不少,共享资源要通过一些比较复杂的计算,此种方式就再也不适用。ide
建立线程只有一种方式——构造 Thread 类。 实现线程的执行单元有两种方方式:线程
public class ShareResourceWithImplRunnable implements Runnable{ private int index = 1; private final int MAX = 1000; @Override public void run(){ while(index <= MAX){ System.out.println(index++); } } public static void main(String[] args) { ShareResourceWithImplRunnable shareResourceWithImplRunnable = new ShareResourceWithImplRunnable(); Thread thread1 = new Thread(shareResourceWithImplRunnable); Thread thread2 = new Thread(shareResourceWithImplRunnable); thread1.start(); thread2.start(); } }
如上所示,ShareResourceWithImplRunnable 类实现了 Runnable 接口,建立一个 ShareResourceWithImplRunnable 类的实例,将 ShareResourceWithImplRunnable 的实例用于构造 多个 Thread,当多个并行运行时,一样能够达到多个线程之间共享资源的目的。code
Thread 中有一个 Runnable 的接口变量:对象
private Runnable target;
使用 Runnable 的实现类的实例做为构造 Thread 对象的实参时,target 将会引用这个 Runnable 接口的实例对象。当调用 Thread 线程 start 方法以后,在线程执行时,会调用 Thread 的 run 方法。在 Thread 的run 方法中调用 target.run() 方法,即 调用 Runnable 接口实现类的实例对象的 run 方法。以下为 Thread run 方法的实现:继承
@Override public void run() { if (target != null) { target.run(); } }