<强> 1。什么时候使用多线程编程强>
一个任务在正常情况下是按顺序执行的,但是如果当前任务里有多个相似进程块(例如,虽然语句),我们就可以考虑把这些代码块抽出来并行运行,无需阻塞
<强> 2。实现多线程的几种方式强>
一种是继承线程类重写运行方法,另一种是实现运行的接口重写运行方法
启动多线程很多情况下是为了处理并发进程,此时对于部分实时性要求不是那么高的业务需求,我们还可以通过实现队列的方式,异步实现。
<强> 3。举例强>
继承线程
/* * * * @ClassName: ThreadByEx * @Description:待办事项 * @author Mr.jqCheng * @date 2018年9月26日 * */公共类ThreadByEx扩展线程{ @Override公共空运行(){//TODO自动生成方法存根 System.out.println(“我是继承线程”); } }
实现可运行
/* * * * @ClassName: ThreadByRunnable * @Description:待办事项 * @author Mr.jqCheng * @date 2018年9月26日 * */公共类ThreadByRunnable实现Runnable{/*公共ThreadByRunnable () { this.run ();//TODO自动生成构造函数存根 } */公共空间运行(){//TODO自动生成方法存根 System.out.println(“我是实现进程”); } }
测试:
/* * * * @ClassName:测试 * @Description:待办事项 * @author Mr.jqCheng * @date 2018年9月26日 * */公共类测试{公共静态void main (String [] args){//继承线程启动的方法 ThreadByEx t1=new ThreadByEx (); t1.start();//启动线程//实现Runnable启动线程的方法 新ThreadByRunnable ThreadByRunnable r=(); 线程t2=新线程(r); t2.start();//启动线程//新ThreadByRunnable ();} }
运行结果:
我是继承线程
我是实现进程
好的,简单的多线程实现方式完成了,在调用开始()的时候,该进程已经进入可执行状态,等待系统执行。
线程处理的几个常用方法:
无效中断():向线程发送中断请求,线程的中断状态将会被设置为真,如果当前线程被一个睡眠调用阻塞,那么将会抛出interrupedException异常。
静态逻辑中断():测试当前线程(当前正在执行命令的这个线程)是否被中断。注意这是个静态方法,调用这个方法会产生一个副作用那就是它会将当前线程的中断状态重置为假的。
布尔isInterrupted():判断线程是否被中断,这个方法的调用不会产生副作用即不改变线程的当前中断状态。
静态线程currentThread():返回代表当前执行线程的线程对象。
守护进程
用来服务于不是服务进程的其他所有当前进程下的所有线程
实现deamon.setDaemon(真正的)就行,要在线程开启之前启用
举例
包com.orange.util;/* * * * @ClassName:测试 * @Description:待办事项 * @author Mr.jqCheng * @date 2018年9月26日 * */公共类测试{ 公共静态void main (String [] args) { 线程deamon2=新线程(新DaemonRunner2 (),“otherRunner”); deamon2.start();//启动线程 尝试{ thread . sleep (1000); }捕捉(InterruptedException e) {//TODO自动生成的catch块 e.printStackTrace (); } 线程虚拟光驱=新线程(新DaemonRunner (),“DaemonRunner”);//设置为守护线程 deamon.setDaemon(真正的); deamon.start();//启动线程 } 静态类DaemonRunner实现Runnable { 公共空间run () {//TODO自动生成方法存根 尝试{ thread . sleep (300); 线程t=Thread.currentThread (); System.out.println (t); }捕捉(异常e) { e.printStackTrace (); 最后}{ System.out.println(“进入守护线程,说明现在还有其他线程在执行”); } } } 静态类DaemonRunner2实现Runnable { 公共空间run () {//TODO自动生成方法存根 尝试{ thread . sleep (1500); System.out.println(“我是其他线程”); }捕捉(异常e) { e.printStackTrace (); } } } }
执行结果:
线程(主要DaemonRunner 5)
进入守护线程,说明现在还有其他线程在执行