Java 多线程共享资源的方法以及 实现线程执行单元的方法

此处仅简单介绍同一任务多线程并行执行时的资源共享,不介绍多线程数据同步。多线程

继承 Thread 类

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

实现 Runnable 接口,使用 Runnable 的一个实现类的实例构造多个 Thread

建立线程只有一种方式——构造 Thread 类。 实现线程的执行单元有两种方方式:线程

  • 重写 Thread 的 run 方法;
  • 实现 Runnable 接口的 run 方法,而且将 Runnable 实例用做构造 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

实现 Runnable 接口实现线程的执行单元的工做原理

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();
        }
    }
相关文章
相关标签/搜索