多线程机制是一种以空间资源换执行效率的机制。进程是应用程序的重量级执行单位,线程是进程中任务的轻量级执行单位,进程提供了线程的共享数据和上下文执行环境。
1、创建线程的执行单元有两种方式
继承Thread类和实现Runnable接口。
启动线程的方式是调用Thread类的start方法。
这两种启动方式中,Thread机制是负责了线程的职责和控制,Runnable接口负责逻辑执行单元。
Thread类是创建线程的唯一方式,实现线程执行单元有两种方式:重写Thread类的run方法和实现Runnable接口的run方法。
2、Thread类的一些具体API
Thread.currentThread():获取执行当前代码段的线程
thread.isAlive():判断当前线程是否处于活动状态
thread.sleep():在指定的毫秒数后,线程thread进入休眠状态。线程在休眠状态不会释放锁。
thread.getId():获取线程threa的唯一标识,线程id在整个JVM中是唯一的。
thread.yield():放弃当前CPU资源,让其他任务去占用CPU资源,因放弃时间不确定,有可能放弃之后又会获得CPU资源。
thread.setName(String name):在线程启动之前修改线程的name,一般情况下,遵循业务逻辑的需要,都要给线程提供name。
thread.getContextClassLoader():获取thread上下文的类加载器,即这个线程是由哪个类加载器加载的。
thread.setContextClassLoader(ClassLoader c):设置thread的类加载器,此方法可以打破JAVA类加载器的父委托机制,有时候也称为JAVA类加载器的后门。
thread.join():会使当前线程处于等待状态,直至被另外的线程中断或者thread执行结束。
3、线程终止的方法
线程运行完毕后,正常终止;借助线程的interrupt标识,使用thread.interrupt()方法中断线程;在线程中增加volatile关键字修饰的变量开关,使用这个开关对线程进行关闭。
测试线程是否终止有两种方法:Thread.interrupted(),测试thread是否已经处于中断状态,执行后具有将状态标识置为false的功能;thread.isInterrupted(),测试thread是否已经处于中断状态,但不清除状态标识。
4、线程的优先级
线程可以划分优先级,优先级为从1到10的整数。优先级具有的规则如下:优先级有被继承的特性;高优先级通常比低优先级先执行;同样的优先级则随机执行;高优先级调用低优先级时,低优先级会调整到和调用线程一样的优先级;优先级调整完成后不一定马上会体现出效果,还要看线程调度情况。
当CPU资源比价空闲的时候,优先级几乎不起作用;当CPU比较忙的时候,高优先级大概率比低优先级先执行。因为优先级的不稳定,所以业务逻辑最好不要依赖优先级。通常使用线程的默认优先级即可。
5、守护线程
Java中存在两种线程,一种是用户线程,另一种是守护线程。守护线程是一种特殊线程,陪伴其他线程,当其他线程全部关闭后,守护线程才会结束。通常守护线程为其他线程提供基础服务,如GC、时钟服务等。守护线程也被称为后台线程,,经常用来执行一些与后台相关的任务。
6、不稳定的线程暂停机制
线程可以使用suspend()方法暂停线程,然后可使用resume()方法恢复线程执行。这两个方法都具有对锁对象独占性,同时还因为容易导致数据不同步。使用线程暂停机制时需要特别注意。

10万+

被折叠的 条评论
为什么被折叠?



