Java多线程博大精深,深入学习可以学很久,先一点点地记录。
学习多线程前,都会接触到进程和线程相关的概念:
进程:正在执行的应用程序,单CPU在某一时间点上只能做一件事,而我们平常电脑执行的多进程,是CPU在做着程序间的高效切换让我们觉得是同是进行着多进程,多进程可以提高CPU的使用率。
线程:线程是进程的执行单元,在同一个进程(程序)内可以执行多个任务,每个任务都可以看作是一个线程,多线程意思是一个应用程序有多条执行路径。
值得注意,线程开销比进程小,起一个线程能共享的数据只是线程的上下文,进程还需要读程序整体,消耗比较大。
Java程序的运行原理
Java命令去启动JVM,JVM会启动一个进程,该进程又会去启动主线程。
JVM的启动是多线程的,因为它至少启动两个线程,主线程和垃圾回收线程。
多线程的启动原理:start()方法去开启一个线程,再由JVM去调用run()方法。
Thread类
实现多线程最基础的类是Thread类,这里对它的方法做下总结:
构造方法:
public class MyThread extends Thread{
volatile boolean flag;
private String name;
public MyThread(){
//空参构造
}
public MyThread(String name,boolean flag) {
//带参构造,可在创建对象时初始化线程名称和线程结束标识
this.name=name;
this.flag=flag;
}
}
成员方法:
my.start;//开启线程
my.setPriority(int n);//设置线程的优先级,1-10之间,默认为5,Java会让优先级高的线程使用CPU
Thread.sleep(int n);//设置线程休眠时间
Thread.currentThread();//获取当前正在执行的线程对象
my.join();//让某一线程执行完毕其它线程才能跟着执行,在线程启动之后调用
Thread.yield();//让多个线程执行时间更平均,但不保证一线程一次
my.setDaemon(true);//设置守护线程,当主线程结束,其它线程也会跟着一起停掉,需在启动线程前调用
my.stop();//杀死线程,该方法已被废除,因为它不释放线程获得的锁
my.interuppt();//中断当前线程正在执行的操作,继续向下执行,并抛出异常
线程的生命周期: