第1章     创建线程

1.1      Thread类

 

 

l  构造方法

 

 

l  常用方法

 

 

1.2      创建线程方式一继承Thread类

获取线程名称

 

 

 

 

 

 

 

 

 

自定义run方法,需要继承Thread,然后重写run方法。

 

 

之后主线程走代码执行,到开启代码的时候开启run方法,之后运行到for循环,这个时候已经开的run方法线程也开始走了,所以就是一起执行,效果图

 

 

1.2.1    多线程的内存图解

 

原理图:

 

 

两个都是站,首先在栈里的main方法中的主线程运行,创建新线程后开启另一个栈新的栈里面继承了Thread重写了run方法并且。这个时候main方法所在的主线程走到了开启线程,也就是运行线程,所以run方法线程里的for循环和刚开启玩线程的main方法也开始下一波的代码运行,就是俩两个for循环一起运行,因为java是用的抢占式调度所以显示的没有顺序。这就是多线程原理,主线程的地位

1.3      创建线程方式—实现Runnable接口

 

 

 

l  接口中的方法

 

 

l  Thread类构造方法

 

 

1.3.1    实现Runnable的原理

Runnable是接口,Threads是继承, Runnable避免了单继承性,Threads类中的继承了run方法的MyThreads类中,只继承了Threads不能再继承其他类,而Runnable是接口,Runnable中的MyRunnable重写run方法的实现类中实现了Runnable并且如果你有其他的需求,可以再继承别的类。

Threads的运行代码顺序是创建新线程和开启新线程都是用thread调用。

而Runnable只负责开启线程,比较推荐Runnable

对比一下

 

Runnable

 

 

Threads

 

 

1.3.2    实现Runnable的好处

Runnable接口避免了单继承的局限性,所以较为常用。

实现Runnable接口的方式,更加的符合面向对象,线程分为两部分,一部分线程对象,一部分线程任务。

继承Thread类,线程对象和线程任务耦合在一起。一旦创建Thread类的子类对象,既是线程对象,有又有线程任务。实现runnable接口,将线程任务单独分离出来封装成对象,类型就是Runnable接口类型。Runnable接口对线程对象和线程任务进行解耦。

也就是说,Thread粘合性太强,一个错全部错,而Runnable可以拆分一样

 

Runnable测试类

 

 

MyRunnable重写run方法

 

 

 

 

 

1.4      线程的匿名内部类使用

       /*    匿名内部类

       new 父类或接口类名(){

              需要重写的方法

       }

       */

Thread内部类

 

 

new完之后快捷键点出来就可以了,想要多次运用可以创建个对象接受

 

Runnable内部类

 

 

New完之后方法点出来给他顶一个run接收一下返回值

 

第2章     线程池

2.1      线程池概念

可以创建一个容器来容纳线程,省去了创建线程的操作,并且用完了的线程可以返回到线程池里,下图为老式办法,但是原理是一样的

 

 

2.2      使用线程池方式—Callable接口

 

线程状态