什么是线程?
可以理解为进程中独立运行的字任务。
使用多线程:
1.继承Thread类:从源码可以看到,Thread累实现了Runnable接口。
如果多次调用start()方法,会出现异常Exception in thread “main” java.lang.IllegalThreadStateException
2.实现Runnable接口
在某些JVM中,i--分为如下三步:
A.取得原有i值
B.计算i-1
C.对i进行赋值
多线程同时访问,会出现非线程安全问题
println()方法内部是同步的。
currentThread()方法:可以返回代码正在被哪个线程调用。
isAlive()方法:判断当前线程是否处于活动状态。
活动状态:已经启动尚未终止。
sleep()方法:使当前正在执行的线程休眠指定毫秒数。
this.currentThread()方法返回的线程。
getId()方法:获得线程的唯一标识。
停止线程:
Thread.interrupt()方法:停止线程时使用。
不能马上停止,做停止标记,当前线程的方法执行完以后停止。
this.interrupted()方法:
测试当前线程是否是已中断状态,执行完清除状态标志为false
this.isInterrupted()方法:
测试当前线程是否是已中断状态,不清除状态标志
this.stop()方法:
暴力停止线程,已废弃,不推荐使用。
会抛出异常,但不需要捕获。
使用return配合interrupt()也可以停止线程。
注意:
建议使用抛异常的方法来终止线程,因为可以在catch代码块中处理异常。
Thread.yieId()方法:
使当前线程放弃cpu资源,重新分配。
放弃时间不确定,有可能刚放弃,马上又获得。
线程的优先级:
一般来说,优先级较高的线程得到的资源较多。
setPriority():设置线程优先级。
Java中优先级分为1~10,10个等级,小于1或者大于10都会抛出异常。
Jdk中有3个预定义的优先级,1,5,10
优先级的继承性:
A线程启动b线程,b线程的优先级和a线程是一样的
守护线程:
守护线程具有陪伴意义,当java中不存在非守护线程,那么守护线程也就销毁了
垃圾回收线程就是一个守护线程。
synchronized()同步方法:
非线程安全问题存在于实例变量中,局部变量不存在。
方法内部的变量是线程私有的。
当多个线程访问多个对象,jvm会创建多个锁。