java 多线程 (一)线程的实现

一、作用

  多线程,可以真正发挥出多核CPU的优势来,提高cpu的利用率,达到充分利用CPU的目的。(java 根据线程优先级进行抢占式调度)

二、实现方式

  多线程主要有两种实现方式、分别是继承Thread类和实现Runnable接口作为宿主。

  1、继承Thread接口、重写run方法

public class Thread2 {
	public static void main (String[] args) {
	    
		Thread t1 = new Thread(){
			@Override
			public void run () {
			    System.out.println(" thread:"+Thread.currentThread().getName());
			}
		};
		t1.start();
    }
}
输出:thread:Thread-0

 2、实现Runnable接口作为宿主

public class Thread2 {
	public static void main (String[] args) {
	    
		//2、实现Runnable接口作为宿主
		Thread t2 = new Thread(new Runnable() {
			@Override
			public void run () {
				  System.out.println(" runnable:"+Thread.currentThread().getName());
			}
		});
		t2.start();
    }
	
}
输出: runnable:Thread-0

使用方式2实现的优势:
1)适合多个相同的程序代码的线程去处理同一个资源
2)可以避免Java中的单继承的限制

三、启动

   我们重写的run方法、是线程执行的具体业务。也就是线程体。但是在启动线程的时候需要调用Thread的start方法。

  public synchronized void start() {
        /**
	 * This method is not invoked for the main method thread or "system"
	 * group threads created/set up by the VM. Any new functionality added 
	 * to this method in the future may have to also be added to the VM.
	 *
	 * A zero status value corresponds to state "NEW".
         */
        if (threadStatus != 0 || this != me)
            throw new IllegalThreadStateException();
        group.add(this);
        start0();
        if (stopBeforeStart) {
	    stop0(throwableFromStop);
	}
    }

    private native void start0();
上面的代码片段来子Thread类,可以看出里面调用了start0() 这个方法。这个方法是本地的其他语言实现的方法(据说是C语言),这个方法会调用底层系统启用线程。并且 start0,此方法会让JVM调用线程的run方法。如果直接调用run方法,就会被当做一个普通的方法调用。不会实现多线程。
当使用继承Thread类的时候,重写了Thread的run方法。所以直接调用我们所写的线程体。当使用 实现Runnable接口作为宿主的使用调用Thread的run方法

   public void run() {
	if (target != null) {
	    target.run();
	}
    }
再调用target的(也就是我们传入的Runnable)的run方法。



记录一下、方便日后查看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值