多线程的总结(上)多线程的总结(上)
多线程是什么?多线程是什么?
概念:概念: 一个java程序是由多个线程共同组成的,我们在学习多线程之前,主方法就是一个线程(main线程),而垃圾回收机制实
质上也是一个线程,我们在写程序的时候垃圾回收机制在后台一直运行着,和主线程并存。多线程是将任务分成多个子任务一
同运行,提高了程序的效率。
线程的执行权:线程的执行权: 多个线程会一同抢夺CUP的时间片,抢到时间片就会执行任务,抢到时间片的概率大小和线程优先级有关。
线程的状态分为就绪状态,运行状态,阻塞状态:线程的状态分为就绪状态,运行状态,阻塞状态:
就绪状态:就绪状态: 和其它线程一起抢夺CUP时间片,抢到了CPU的时间片就执行任务。
运行状态:运行状态: 抢到时间片之后会进入运行状态,开始执行任务,时间片用完之后会再次回到就绪状态再次抢夺CPU的时间片,
再次执行任务时会接着上次的任务继续执行。
阻塞状态:阻塞状态: 例如在线程执行的时候接受用户的输入,这个线程就会暂停执行,等待用户输入后会回到就绪状态再次抢夺CPU
时间片。
线程的生命周期:线程的生命周期: 从就绪状态开始一直到运行状态运行完任务,线程就死亡了。
多线程并发:多线程并发: 就是多个线程抢夺时间片执行各自的任务,提高了程序的效率,但这可能是存在线程安全问题。多线程并发存多线程并发存
在两种机制:同步机制和异步机制在两种机制:同步机制和异步机制(下一篇博客关于线程安全的问题的时候会讲到)
好了接下来都是干货了,先来一波多线程常用的方法来压压惊。
多线程的常用方法多线程的常用方法
1. currentThread()方法:
作用:表示当前线程,常与getName()方法连用,Thread.currentThread().getName();表示当前线程的名字
语法:线程对象(引用).currentThread();或者 Thread.currentThread();
2. getName()方法:
作用:获取线程名字,返回值为String类型。
语法:线程对象(引用).getName()
3. setName()方法:
作用:修改线程名字,无返回值
语法:线程对象(引用).setName(“线程名字”);
4. setDaemon()方法:
作用:传入参数true,将普通线程变为守护线程,无返回值。
语法:线程对象(引用).setDaemon(true);
5. setPriority()方法:
作用:修改线程优先级,传入一个整型数字(1到10以内)若不是1到10以内会发生异常,无返回值。
语法:线程对象(引用).setPriority(“整型数值”);
6. start()方法:
作用:启动线程,会自动调用run()方法(实现Callbale接口的线程除外)
语法:线程对象(引用).start();
7. join()方法:
作用:将一个线程加入到另一个线程中,当前线程会进入阻塞状态(直到加入的线程运行结束,当前线程才会继续运行),也可
以理解为将两个线程合并。
语法:线程对象(引用).join();
8. stop()方法:
作用:强行使线程结束(不安全,容易造成数据丢失等,让线程停止有别的办法)。
语法:线程对象(引用).stop();
9. sleep()方法:
作用:让当前线程睡眠,传入一个整型参数,睡眠时间与传入的参数有关,参数单位为毫秒。
语法:Thread.sleep(整型参数);或者线程对象(引用).sleep(整型参数);
注意:sleep()方法有编译时异常需要处理。(关于异常可以看我异常概述的博客)。
10. schedule()方法:(这是定时器常用的方法,在此篇博客后面会对定时器进行讲解。)
作用:设置某个时间开始执行某个任务,可以使其每隔特定时间执行一次某个任务(常用于数据的备份)
语法:Timer类对象(引用).schedule(参数1,参数2,参数3);