zoukankan      html  css  js  c++  java
  • java多线程解读一(基础篇)

    一、线程的定义

    每个应用程序内部都是由一个或多个的进程组成,而每个进程内部都是由许多具体的线程执行,所以,线程是每个程序执行的最小单位。

    二、线程的实现

    1.通过继承java.lang.Thread类、重写类中的run方法

    class PrimeThread extends Thread {

      long minPrime;

      PrimeThread(long minPrime) {

        this.minPrime = minPrime;

      }

      public void run() {

         // compute primes larger than minPrime  . . .

      }

    }

    然后通过创建线程对象,使线程就绪

    PrimeThread p = new PrimeThread(143);

    p.start();

    2.通过实现java.lang.Runnable接口,实现类中的run方法class PrimeRun implements Runnable {

      long minPrime;

      PrimeRun(long minPrime) {

        this.minPrime = minPrime;

      }

      public void run() {

        // compute primes larger than minPrime  . . .

      }

    }

    然后创建 Thread 时作为一个参数来传递并启动PrimeRun p = new PrimeRun(143);

    new Thread(p).start();

    注:main方法其实也是一个线程。在java中所以的线程都是同时启动的,至于什么时候,哪个先执行,完全看谁先得到CPU的资源。

    java中,每次程序运行至少启动2个线程。一个是main线程,一个是垃圾收集线程。因为每当使用java命令执行一个类的时候,实际上都会启动一个JVM,每一个jVM实际就是在操作系统中启动了一个进程。

    三、线程的状态

    一般线程的状态都是指线程的生命周期,线程共具有5个状态

    1.新建状态(New),代表我们新创建了一个线程对象。

    2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。

    3.运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。

    4.阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:

    (一)、等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入等待池中。

    (二)、同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。

    (三)、其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

    5.死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

  • 相关阅读:
    TP隐藏入口
    CentOs5.2中PHP的升级
    centos 关闭不使用的服务
    也不知怎么了LVS.SH找不到,网上搜了一篇环境搭配CENTOS下面的高可用 参考
    三台CentOS 5 Linux LVS 的DR 模式http负载均衡安装步骤
    分享Centos作为WEB服务器的防火墙规则
    Openssl生成根证书、服务器证书并签核证书
    生成apache证书(https应用)
    openssl生成https证书 (转)
    ls -l 列表信息详解
  • 原文地址:https://www.cnblogs.com/huanmin/p/6135783.html
Copyright © 2011-2022 走看看