多线程基础之走进Java世界中的多线程
一.进程,线程与任务
进程就是一个程序运行的实例,例如:一个运行的Eclipse就是一个进程.进程与程序的关系就像是播放中的Mp4视频与相应的视频文件的关系,一个动态一个静态.一个java程序实质就是启用一个java虚拟机进程,也就是运行一个java程序就是一个Java虚拟机进程.进程是程序向操作系统申请资源(内存空间等)的基本单位,而线程又是进程中可以独立执行的最小单位.一个进程可以包含多个线程,这些线程共享进程的资源(内存空间,文件句柄).线程所完成的计算等操作被称为任务.
二.多线程编程简介
什么是多线程编程?(概念问题不多数直接上图)
三.Java线程API简介
Java标准库类java.lang.Thread就是Java平台对线程的实现.Thread类或它的子类的一个实例就是一个线程.
-
线程的创建,启动与运行.
每个线程都有其要执行的任务,这些业务逻辑在Thread的run()方法中直接实现或者调用,所以run()方法是线程任务处理逻辑的入口方法.run()方法由java虚拟机直接调用 而不应该在java程序里面自己调用.
Thread常用的两个构造器是:Thread()和Thread(Runnable target)相应的对应了线程的两种创建方式.一种是定义Thread的子类再该子类中覆盖run()方法并实现相应的逻辑.另一种是上述第二种构造器创建一个java.lang.Runnable的实例实现相应的逻辑,然后再以Runnable接口的实例作为参数直接New一个Thread的实例.
这样做会导致直接调用run()的线程会运行在start()调用的线程之中,违背了多线程的初衷,并不会分开处理任务.两种创建方式的区别:
1:从面向对象编程的角度来讲第一种创建方式是基于继承,第二种创建方式是以Runnable的实例作为参数直接new创建Thread实例的组合技术.组合相对于继承来讲耦合度更低,所以推荐使用第二种创建方式.
2:从对象共享角度来讲第二种方式意味着多个线程可以共享同一个Runnable实例.
3:从创建成本来讲java中的线程是一个特殊的Runnable实例,因为在创建它的时候java虚拟机会为其分配栈空间,内存线核的资源,因此创建一个线程实例比创建一个普通Runnable接口耗费更多的资源性能.所以我们直接创建Runnable接口的实例传递给其他对象使用(第二种方式)的话节约了很多资源提升了性能.-
线程的属性.
-
线程的属性.