前言
你如果是刚开始学习线程的知识,那么你可以看下这篇文章,本文章虽然不能带着你学习全部的线程知识,但是可以先带你看一下基本的知识,在以后的学习中可以更加顺畅
一、实现线程的方法有多少种
在网上百度线程实现的方法,可以看到有很多种
- 继承Thread类,重写run方法
- 实现Runnable接口,重写run方法。
- 通过Callable和RutureTask创建线程
在网上有很多种说法,当然这些说法也是正确的,它们确实可以创建出线程来,但是看到它们的线程的源码后,你可以发现它们无非是通过Thread类或者是实现Runnable接口来实现的。
在Oracle的官方文档中也有这样写过:
如何调用的线程单元的代码呢?
在此先来看下在使用了Thread.start的方法后会进行舒什么样的操作呢?上面说到不管使用的哪一种方法来创建的线程,都要重写run方法,当使用实现runnable类的时候,将它做为一个参数传入Thread构造中,在调用其中的run方法。
当使用了继承Thread类的方式中,会将Thread类run方法全部的重写,所执行的run里面的代码是重写后的
start和run方法的区别
- start(): 作用是启动一个新的线程,然后会执行相应的run方法,不过Start不可以重复的调用
- Run(): run可以被重复的调用,如果是单独的调用的话,就会和普通方法一样,不会有有新线程的产生,
start方法不可以重复调用的原因是,在调用start时候,线程的状态也会改变,当在调用start时,会有一个检测线程状态的代码,如果不是0(0代表的是new状态)就会抛出线程状态异常。