zoukankan      html  css  js  c++  java
  • Java 线程(1)

    1.创建

    Java种线程的创建方法有三种:

    1)继承Thread对象,实现run()方法

     1 package thread;
     2 
     3 public class MyThread01 extends Thread {
     4 
     5     private static int i = 10;
     6 
     7     @Override
     8     public void run() {
     9         while (i > 0) {
    10             System.out.println(--i);
    11         }
    12     }
    13 
    14     public static void main(String[] args) {
    15         new MyThread01().start();// 注意用start来启动一个线程
    16         new MyThread01().start();
    17         // new MyThread01().run(); 这只是运行了run方法并没有启动线程
    18     }
    19 }

    2)实现Runnable接口,实例化Thread接口

     1 package thread;
     2 
     3 public class MyThread02 implements Runnable {
     4     // private static int i = 10;// 用一个static 变量来实现对资源的共享
     5 
     6     private int i = 10;
     7 
     8     @Override
     9     public void run() {
    10 
    11         while (i > 0) {
    12             System.out.println(Thread.currentThread().getName() + "执行" + (--i));
    13         }
    14     }
    15 
    16     public static void main(String[] args) {
    17 
    18         // Thread thread1 = new Thread(new MyThread02());
    19         // thread1.setName("T1");
    20         // Thread thread2 = new Thread(new MyThread02());
    21         // thread2.setName("T2");
    22         // thread1.start();
    23         // thread2.start();
    24 
    25         // 用同一个MyThread02完成资源共享
    26         MyThread02 thread02 = new MyThread02();
    27         Thread thread11 = new Thread(thread02);
    28         thread11.setName("T1");
    29         Thread thread12 = new Thread(thread02);
    30         thread12.setName("T2");
    31         thread11.start();
    32         thread12.start();
    33 
    34     }
    35 
    36 }

    3)应用程序可以使用Executor框架来创建线程池

    链接:http://www.cnblogs.com/dolphin0520/p/3932921.html

    2.启动

    1)start方法
    用 start方法来启动线程,是真正实现了多线程, 通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法。但要注意的是,此时无需等待run()方法执行完毕,即可继续执行下面的代码。所以run()方法并没有实现多线程。
    2)run方法
    run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码。

    3.线程的生命周期(可用状态)

    1)新建(new)

    2)可运行(runnable):对象线程创建后,其他线程如主线程调用了该兑现的start方法。线程位于可运行线程池中,等待被线程调度,获取CPU。

    3)运行(running):可运行状态的线程获得了cpu时间片,执行代码。

    4.阻塞(block):线程由于某种原因放弃了cpu的还使用权,暂时停止质心,直到线程进入可运行状态,才有机会再次获得cpu timeslice进入运行状态。分三种情况:

    1)等待阻塞:运行的线程执行wait()方法,进入等待队列

    2)同步阻塞:运行的线程在获取对象的同步锁的时候,若该同步锁被其他线程占用,则JVM会把该线程放入锁池。

    3)其他阻塞:执行Thread.sleep()或t.join()时,或者发出了IO请求时,JVM会把线程置为阻塞状态。

    5.死亡(dead):run()或main()方法执行结束或者因为异常退出run(),则结束生命周期。

  • 相关阅读:
    一个小型软件公司关于研发、管理、实施、团队等讨论
    二十七、EFW框架BS系统开发中的MVC模式探讨
    EFW框架问题收集与答疑
    EFW框架源代码版本升级记录说明
    【开源EFW框架】框架中自定义控件GridBoxCard使用实例说明
    二十七(序幕)、【开源】EFW框架破茧成蝶
    二十六、【开源框架】EFW框架Winform前端开发之Grid++Report报表、条形码、Excel导出、图表控件
    二十五、【开源】EFW框架Winform前端开发之强大的自定义控件库
    二十四、【开源】EFW框架Winform前端开发之项目结构说明和调试方法
    二十三、【开源】EFW框架Web前端开发之常用组件(FusionCharts图表、ReportAll报表等)
  • 原文地址:https://www.cnblogs.com/Run-dream/p/5283760.html
Copyright © 2011-2022 走看看