关于多线程:多线程基础

49次阅读

共计 1349 个字符,预计需要花费 4 分钟才能阅读完成。

一、线程生命周期(状态)

二、线程死亡(DEAD)
线程会以上面三种形式完结,完结后就是死亡状态。
失常完结

1. run()或 call()办法执行实现,线程失常完结。

异样完结

2. 线程抛出一个未捕捉的 Exception 或 Error。

调用 stop

3. 间接调用该线程的 stop()办法来完结该线程—该办法通常容易导致死锁,不举荐应用。

三、JAVA 线程实现 / 创立形式

  1. 继承 Thread 类
  2. 实现 Runnable 接口。
  3. ExecutorService、Callable<Class>、Future 有返回值线程
  4. 基于线程池的形式
    public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {

     return new ScheduledThreadPoolExecutor(corePoolSize);

    }

    public static ExecutorService newFixedThreadPool(int nThreads) {

     return new ThreadPoolExecutor(nThreads, nThreads,
             0L, TimeUnit.MILLISECONDS,
             new LinkedBlockingQueue<Runnable>());

    }
    public static ExecutorService newCachedThreadPool() {

     return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
             60L, TimeUnit.SECONDS,
             new SynchronousQueue<Runnable>());

    }

    public static ExecutorService newSingleThreadExecutor() {

     return  new ThreadPoolExecutor(1, 1,
                     0L, TimeUnit.MILLISECONDS,
                     new LinkedBlockingQueue<Runnable>());

    }
    四、sleep 与 wait 区别

  5. 对于 sleep()办法,咱们首先要晓得该办法是属于 Thread 类中的。而 wait()办法,则是属于
    Object 类中的。线程相干的根本办法有 wait,notify,notifyAll,sleep,join,yield 等。
  6. sleep()办法导致了程序暂停执行指定的工夫,让出 cpu 该其余线程,然而他的监控状态仍然
    保持者,当指定的工夫到了又会主动复原运行状态。
  7. 在调用 sleep()办法的过程中,线程不会开释对象锁。
  8. 而当调用 wait()办法的时候,线程会放弃对象锁,进入期待此对象的期待锁定池,只有针对此
    对象调用 notify()办法后本线程才进入对象锁定池筹备获取对象锁进入运行状态。
    五、start 与 run 区别
  9. start()办法来启动线程,真正实现了多线程运行。这时无需期待 run 办法体代码执行结束,
    能够间接继续执行上面的代码。
  10. 通过调用 Thread 类的 start()办法来启动一个线程,这时此线程是处于就绪状态,并没有运
    行。
  11. 办法 run()称为线程体,它蕴含了要执行的这个线程的内容,线程就进入了运行状态,开始运
    行 run 函数当中的代码。Run 办法运行完结,此线程终止。而后 CPU 再调度其它线程。

正文完
 0