学习笔记,持续更新!!!
2019.4.30
1.进程和线程的概念
进程:进程是操作系统结构的基础,是一次程序的执行;是一个程序及其数据在处理机上顺序执行时所发生的活动;是程序在一个数据集合上运行的过程,它是系统进行志愿分配和调度的一个独立单位。
线程:线程可以理解成是在进程中独立执行的子任务。比如,QQ.exe运行时就有很多的子任务同时运行:好友视频线程、下载文件线程、传输数据线程。
2.java实现多线程有两种方法(1)继承extends类(2)实现Runnable接口,由于java语言只能单继承,所以建议使用第二种方法
一个小例子:
public class MyThread implements Runnable{ @Override public void run() { System.out.println("running........."); } } public class test { @Test public void demo1(){ Runnable runnable = new MyThread(); Thread thread = new Thread(runnable); thread.start(); System.out.println("Ending.........."); } }
运行结果:
从上图的运行结果来看,说明使用多线程技术时,代码运行的结果与代码执行顺序或调用顺序无关(异步执行)。
异步执行:执行语句结束的顺序与语句执行开始的顺序并不一定相同。
3.几个常用方法
(1)currentThread()方法
currentThread()方法可返回代码段正在被哪个线程调用的信息。
(2)isAlive()方法
isAlive()的功能是判断当前的线程是否处于活动状态。
(3)sleep()方法
sleep()的作用是在指定的毫秒数内让当前“正在执行的线程”休眠(暂停执行)。
(4)getId()方法
getId()方法是取得线程的唯一标识。
(5)interrupt()方法
interrupt()方法的使用效果并不像for+break语句那样,马上就停止循环。调用interrupt()方法仅仅是在当前线程打了一个停止的标记,并不是真的停止线程。(Thread类中的方法)
interrupted()方法:测试当前线程是否已经中断,执行后将状态标志设置为false。(Thread类中的方法)
isInterrupted()方法:测试线程Thread对象是否已经中断,但不清楚状态标志。(Thread类中的方法)
那么如何让线程停止呢——异常法
public class MyThread extends Thread{ @Override public void run() { try{ for(int i=0; i<500000; i++){ if(this.isInterrupted()){ System.out.println("已经是停止状态!"); throw new InterruptedException(); } System.out.println("i=" + (i+1)); } } catch(InterruptedException e){ System.out.println("进MyThread.java类run方法中的catch了!"); e.printStackTrace(); } } } public class test { @Test public void demo1(){ try{ MyThread thread = new MyThread(); thread.start(); thread.sleep(200); thread.interrupt(); }catch(Exception e){ System.out.println("main catch"); e.printStackTrace(); } } }
测试结果:
还可以使用interrupt()方法与return结合使用实现线程停止,不过还是建议使用“抛异常”的方法,因为catch快中还可以将异常向上抛,使线程停止的事件得以传播。
如果线程在sleep状态下停止线程,会进入catch语句,并且清除停止值,使之变成false.
(6)stop()方法
stop()方法已过时,这种方法会强行停止线程,可能使一些清理性的工作得不到完成,导致线程不安全。
(7)suspend与resume方法
suspend()方法暂停线程
resume()方法恢复线程执行
(8)yield()方法
yield()方法的作用是放弃当前的cpu资源,将挞让给其他的任务去占用cpu执行时间。但放弃的时间不缺定,有可能刚刚放弃,马上又获得cpu时间。
(9)setPriority()方法
setPriority()方法设置线程优先级,线程的优先级分为1~10.
原文:https://www.cnblogs.com/mxj961116/p/10798452.html