多线程的实现

多线程的实现

 

 

  (一)基本概念

 

  ①程序:一个指令的集合;

 

  ②进程:正在执行中的程序;(资源分配的单位)

 

  ③线程:进程中的一个执行路径。(调度和执行的单位)

  

  (注:一个进程中必须存在主线程,主线程运行的代码存在main方法中)

 

 

  (二)Thread类

 

  ①Thread(Runnable target, String name)构造方法:分配新的 Thread 对象。

 

  ②currentThread方法:返回对当前正在执行的线程对象的引用。

 

  ③getName方法:返回该线程的名称。

 

  ④getState方法:返回该线程的状态。

  返回值:  NEW——新生状态;     RUNNABLE——运行状态;     BLOCKED——阻塞状态;     WAITING——等待唤醒;      

       TIMED_WAITING——等待指定时间长度;    TERMINATED——死亡状态。

 

  ⑤getPriority方法:返回线程的优先级。

 

  ⑥setPriority(int newPriority):更改线程的优先级(优先级设定在1~10之间,默认值为5)。

 

  ⑦isAlive方法:测试线程是否处于活动状态。

  返回值:线程处于活动状态——true;否则——false。

 

  ⑧join方法:等待该线程终止(该线程强制执行,其它线程处于阻塞状态)。

 

  ⑨sleep(long millis)方法:在指定的毫秒数内让当前正在执行的线程休眠,线程处于阻塞状态。

 

  ⑩yield方法:暂停当前线程对象执行一次,该线程返回就绪状态。

 

 

  (三)多线程的实现1——继承Thread类

 

  ①继承Thread类;

 

  ②重写run方法,将要执行的代码写入run方法中;

 

  ③创建线程对象,调用start方法启动线程。

 

public class Test {
       public static void main(String[] args) {
    MyThread mt = new MyThread();
    mt.start();
          for (int i = 0; i < 100; i++) {
             System.out.println("Main" + i);
         }
     }
}

 

  

 

public class MyThread extends Thread{
       @Override
       public void run() {
             for (int i = 0; i < 100; i++) {
                    System.out.println("MyThread"+i);
             }
       }
}

 

 

  

  (四)多线程的实现2——实现Runnable接口

  

  ①创建Thread类,实现Runnable接口;

 

  ②实现run方法;

 

  ③创建一个实现Runnable接口的类的对象,用该对象来构造Thread对象;

 

  ④调用start方法启动线程。

 

 

 

public class Test {
       public static void main(String[] args) {
         MyThread02 mt = new MyThread02();
              Thread th = new Thread(mt);
              th.start();
              for (int i = 0; i < 100; i++) {
                     System.out.println("Main" + i);
              }
       }
}

 

 

public class MyThread02 implements Runnable{
     @Override
     public void run() {
          for (int i = 0; i < 100; i++) {
                 System.out.println("MyThread"+i);
          }
     }
}

 

 

 

  (五)多线程的实现3——实现Callable接口

  

  

  ①创建Thread类,实现Callable接口;

 

  ②创建一个实现Callable接口的类的对象

 

  ③创建一FutureTask的对象,用该对象来构造Thread对象;

 

  ④调用start方法启动线程。

 

 

public class Test {
  public static void main(String[] args) {
    Callable<T> oneCallable = new SomeCallable<T>();
    FutureTask<T> oneTask = new FutureTask<T>(oneCallable);
    Thread oneThread = new Thread(oneTask);
    oneThread.start();
  }
}
   

 

 

 

public interface Callable<T>   { 
  T call() throws Exception;   
} 

 

  

public class SomeCallable<T> extends OtherClass implements Callable<T> {

    @Override
    public T call() throws Exception {
        return null;
    }
}

 

  

 

 

  (六)线程的状态

  

  ①新生状态:无资源、无资格;

 

  ②就绪状态:有资格、无资源;

 

  ③运行状态:有资源、有资格;

 

  ④阻塞状态:无资格、让资源;

 

  ⑤死亡状态:线程结束。

 

 

  (七)线程的运行过程

 

 


  过程①:调用start方法,进入就绪状态;

 

  过程②:CPU调度该线程,进入运行状态;

 

  过程③:run方法执行完毕、线程被强制结束或抛出未捕获异常;

 

  过程④:发生导致线程阻塞的事件;

 

  过程⑤:阻塞的事件结束,重新进入就绪状态;

 

  过程⑥:CPU片段时间到,线程未执行完毕,返回就绪状态。

 

 

 

———————————————————————————————————————————————————————————————————

The end   万有引力+

-

-

-

-

-

posted @ 2019-04-22 12:22  万有引力+  阅读(224)  评论(0编辑  收藏  举报