多线程的底层实现

在Java中对于多线程实现一定要有一个线程的主类,而这个线程的主类往往是需要操作一些资源。但是对于这个多线程主类的实现是有一定要求:

  • 继承Thread 父类
  • 实现Runnable 接口 (Callable接口)

1.继承Thread 类实现多线程

在java.lang包中存在有Thread类,子类继承Thread类之后需要覆写Thread类中的run方法,那么这个方法就属于线程的主方法,定义:public void run()

范例:

package cn.mldn.demo;

class MyThread extends Thread{  //表示实现多线程	
	private String name;
	public MyThread(String name){
		this.name = name;
	}
	@Override
	public void run() { //覆写run方法,线程的主方法
		for (int i = 0; i < 10; i++) {
			System.out.println(this.name+",i="+i);
		}
		
	}
}
public class TestDemo {

	public static void main(String[] args) {
	}

}

在线程的主类之中只是将内容输出10次。但是需要注意的是:所有的多线程的执行一定是并发完成的,即:在同一个时间段上会有多个线程交替执行,所有为了达到这样的目的,绝对不会够直接去调用run()方法,而是应该调用Thread 类中的start()方法去启动多线程:public void start().

范例:

package cn.mldn.demo;

class MyThread extends Thread{  //表示实现多线程	
	private String name;
	public MyThread(String name){
		this.name = name;
	}
	@Override
	public void run() { //覆写run方法,线程的主方法
		for (int i = 0; i < 10; i++) {
			System.out.println(this.name+",i="+i);
		}
		
	}
}
public class TestDemo {

	public static void main(String[] args) {
		MyThread mt1 = new MyThread("线程A");
		MyThread mt2 = new MyThread("线程B");
		MyThread mt3 = new MyThread("线程C");
		mt1.start();
		mt2.start();
		mt3.start();
		
	}

}

执行效果:

总结:所有的线程都属于交替执行,本身是没有固定的执行顺序的

public class TestDemo {

	public static void main(String[] args) {
		MyThread mt1 = new MyThread("线程A");
		MyThread mt2 = new MyThread("线程B");
		MyThread mt3 = new MyThread("线程C");
		mt1.run();
		mt2.run();
		mt3.run();
		
	}

}

 效果图:

以上就是start()方法和run()方法的不同之处

原因---》

思考:为什么现在启动多线程不使用run()方法,而非要使用start()方法?

         为了方便解释此问题,必须打开Thread类中的start()源代码来观察(E:Java\jdk.8.0_6U\src.zip\java)。(比如咱们平常见到的src.zip压缩包是zip结尾的,不是rar,因为它是收费的)

   再往下走\lang\Thread.java下寻找stat()方法:

 

从start()源码中就会发现,方法会抛出一个异常:,但是整个方法里面没有使用throws声明,没有使用try。。。。catch捕获处理,而之所以会出现这样的情况是因为此异常属于RuntimeException的异常的子类。

java.lang.Object
   java.lang.Throwable
      java.lang.Exception
         java.lang.RuntimeException
            java.lang.IllegalArgumentException
               java.lang.IllegalThreadStateException

此异常指的是一个线程已经调用了start()方法后又重复执行了start()方法所造成的问题。

在调用start()方法里面发现会调用start0()方法,而start()方法上使用了一个native关键字定义,这会关键字会调用那个本机的操作系统函数。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醉梦洛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值