美文网首页
Java基础—多线程总结

Java基础—多线程总结

作者: lemonMT | 来源:发表于2018-05-03 21:29 被阅读0次

    创建线程的三种方式

    1.0 继承Thread类

    继承Thread方式

    2.0实现Runnable接口

    实现Runnable接口

    3.0实现Callable接口

    实现callable接口

    线程的状态

    状态

    Thread类的方法 

    String getName()返回该线程的名称。 

    static Thread currentThread():返回对当前正在执行的线程对象的引用。我觉得就是主线程 

    int getPriority() 返回线程的优先级。 

    void setPriority(int newPriority) 更改线程的优先级。 

    static void sleep(long millis) 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。 但是并没有释放锁。一到时间立马就执行。

     void join() 等待该线程终止。 

     void setDaemon(boolean on) 将该线程标记为守护线程或用户线程。 当只剩下守护线程时jvm将终止 

    static void yield() 暂停当前正在执行的线程对象,并执行其他线程。 释放了锁,使用后在可运行状态。释放后,执行的必须是级别比他高的。

     void stop(Throwable obj) 已过时。 强制终止线程。立马中断。 

    中断线程: void interrupt() 中断线程。不会立马中断,会执行后中断。

    Object类方法与线程方法对比

     sleep()与wait() : 1. sleep处于临时阻塞状态,但是并没有释放对象锁, wait在执行后立马释放锁,处于阻塞状态。2. sleep的时间到了,立马执行,  wait方法则在执行后如果没有被notify或者notifyAll唤醒则一直处于等待状态。3.wait方法则必须在同步中使用,而sleep不用。

    线程同步

    synchroized, 可以修饰方法,  代码段,类等。

    LOCK使用

    lock ,只能锁类。

    1.synchronized

     优点:实现简单,语义清晰,便于JVM堆栈跟踪,加锁解锁过程由JVM自动控制,提供了多种优化方案,使用更广泛

      缺点:悲观的排他锁,不能进行高级功能

    2.lock

      优点:可定时的、可轮询的与可中断的锁获取操作,提供了读写锁、公平锁和非公平锁

      缺点:需手动释放锁unlock,不适合JVM进行堆栈跟踪

    3.相同点

      都是可重入锁

    线程池

    Executor管理ExecutorService,然后生产各个线程池

    newSingleThreadExecutor。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。

    newFixedThreadPool。每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。

    newCachedThreadPool。如果线程池的大小超过了处理任务所需要的线程,那么就会回收部分空闲(60秒不执行任务)的线程,当任务数增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小

    newScheduledThreadPool。创建一个大小无限的线程池。此线程池支持定时以及周期性执行任务的需求。

    线程关闭调用  service.shutdown();

    ThreadLocal类

    线程本地备份,避免并发访问,导致线程数据不安全。

    并发包集合

      并发包中,全是线程安全的集合。

    ConcurrentHashMap, 

    ConcurrentSkipListMap, 

    ConcurrentSkipListSet, 

    ConcurrentLinkedQueue, 

    ConcurrentLinkedDeque

    CopyOnWriteArrayList 

    CopyOnWriteArraySet

    相关文章

      网友评论

          本文标题:Java基础—多线程总结

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