进程与线程:
进程是受操作系统管理的基本运行单元,线程可以理解成是在进程中运行的子任务。
对于单核单线程CPU而言,同时只可运行一个线程,cpu在任务之间不停的切换,由于切换速度非常快,给使用者的感受就是这些任务似乎在同时运行。这是多线程技术的优点,使用多线程也就是在使用异步。
对于多核多线程CPU而言,能够同时运行的线程数增加,相应各任务之间切换速度更加快,所以多核心CPU的运行速度更加快。
线程的start()和run()方法:
Thread.java类中的start()方法通知“线程规划器”此线程已准备就绪,等待调用线程对象的run()方法,具有异步执行的效果。如果使用thread.run()方法就不是异步执行了,而是同步,那么此线程对象并不交给“线程规划器”来进行处理,必须等待run()方法中的代码执行完之后才能调用后面的方法。
实现多线程编程的方式有两种:
继承Thread类,实现Runnable接口。使用继承方式来开发多线程应用程序在设计上是有局限性的,因为Java是单根继承,不支持多继承。Thread.java类也实现了Runnable接口,也就意味着Thread(Runnable target)不光可以传入Runnable接口的对象,还可以将一个Thread对象中的run()方法交由其他线程进行调用。
非线程安全:
非线程安全主要是指多个线程对同一个对象中的同一个实例变量进行操作时会出现值被更改、值不同步的情况,进而影响程序的执行流程。通过在代码前加synchronized关键字加锁来解决问题。
currentThread()方法:
返回当前代码段正在被哪个线程调用的信息。
isAlive()方法:
测试线程是否处于活跃状态即线程已经启动且尚未终止。
判断线程状态是否是停止状态:
this.interrupted():测试当前线程是否已经是中断状态,执行后具有将状态标志清除为false的功能。
this.isInterupted():测试线程Thred对象是否已经是中断状态,但不清除状态标志。
interrupt()方法只是为线程设置中断标记,线程中还需通过if(this.interrupted())和return来中断线程。