美文网首页
Java多线程 - API

Java多线程 - API

作者: yuanzicheng | 来源:发表于2017-05-05 23:42 被阅读95次
    • Java中创建线程有4种方式:实现Runnable接口、继承Thread(Thread本身也是Runnable接口的实现类)、实现Callable接口(可以返回执行结果)、使用Executor框架;
    • 线程类的多个实例(即多个线程)中,实例变量是相互独立的;
    • 线程类的一个实例(单个线程)作为参数传入多个线程中,实例变量在这些线程中是共享的,但是存在线程安全问题,需要在操作实例变量的方法上加上同步锁synchronized
    • 获取当前线程的方法:currentThread()
    • 检查线程是否存活:isAlive()
    • 使线程阻塞一定时间(ms为单位):sleep()
    • 获取线程ID:getId()
    • 中断线程(并不是真正的终止,而是标记):interrupt()
    • 检查当前线程是否中断(静态方法):interrupted(),再次使用会清除中断标记;
    • 检查线程是否中断:isInterrupted()
    • interrupt()后sleep()、sleep()后interrupt()均会发生InterruptedException异常;
    • 停止线程:检查是否中断,手动抛出异常(推荐,线程停止事件可以向上传播),或return
    • 暴力停止线程:stop(),此方法存在线程安全问题,已过时,不建议使用;
    • suspend()方法可以暂停线程,resume()方法可以恢复暂停的线程,不过这两个方法在jdk1.8中也已经过时了;
    • 线程执行到synchronized的方法时使用suspend()会引起独占锁问题;
    • yield()可以令线程释放当前的CPU资源,但释放的时间不确定,有可能释放后又立马获得;
    • 线程存在优先级1-10,设置优先级的方法为setPriority(),超过此范围会抛出异常IllegalArgumentException,JDK使用3个常量来预定义优先级:MIN_PRIORITY(1)NORM_PRIORITY(5)MAX_PRIORITY(10)
    • 线程的优先级具有继承性:如线程A启动线程B,则线程A、B的优先级相同;
    • 线程的优先级具有规则性:高优先级的线程总是大部分先执行完,优先级差距越大越明显,但不代表高优先级的线程全部先执行完;
    • 线程的优先级具有随机性:优先级较高的线程并不一定每一次都先执行完run()方法中的任务;
    • Java线程分为:守护线程用户线程,方法setDaemon()可以标记线程是否守护线程,当前运行的所有线程为守护线程时,JVM会结束工作。

    相关文章

      网友评论

          本文标题:Java多线程 - API

          本文链接:https://www.haomeiwen.com/subject/uwzstxtx.html