zoukankan      html  css  js  c++  java
  • JavaSE——多线程实现的两种方式

    Thread类:

    创建新执行线程有两种方法。

    一种方法是将类声明为 Thread 的子类。该子类应重写 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();
     

    另一种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。然后可以分配该类的实例,在创建 Thread 时作为一个参数来传递并启动。采用这种风格的同一个例子如下所示:

    注意:Runnable 为非 Thread 子类的类提供了一种激活方式。通过实例化某个 Thread 实例并将自身作为运行目标,就可以运行实现 Runnable 的类而无需创建 Thread 的子类。

    即  MyRunnable runnable = new MyRunnable();

         Thread t = new Thread(runnable);

     Runnable 接口:


         class PrimeRun implements Runnable {
             long minPrime;
             PrimeRun(long minPrime) {
                 this.minPrime = minPrime;
             }
     
             public void run() {
                 // compute primes larger than minPrime
                  . . .
             }
         }
     

    然后,下列代码会创建并启动一个线程:

    PrimeRun p = new PrimeRun(143);
         new Thread(p).start();

     注意线程的开始执行是用其实例对象去调用start()方法,开始执行后才会去调用该线程的run()方法。start()方法如被重写则无法启动线程。并且一个线程对象不可启动多个线程即不能去重复调用start()方法。

    一般进行多线程编程时会采用去实现Runnable接口而不是去继承Thead类,因为java是单根继承多实现。可以一次实现多个接口。

    并且Runnable可以实现资源共享。

    注意:在java平台运行多线程序时要启动任务务管理器,打开设置相关性,只选择一个cpu。

    在main方法中创建的线程叫做 main线程(主线程)。主线程运行结束,则整个程序运行结束。

    左边为主线程,当主线程运行到虚线处切换运行子线程(右箭头)。在同一cpu运行的多个线程来回切换要运行,提高资源的利用效率。

    线程的生命周期:

    new线程对象→新建

    调用start()就绪状态(Runnable)→方法调用栈、程序计时器→线程处于可运行池中

    调用run() 运行状态( Running )占用CPU→特殊情况 堵塞状态(暂时停止运行不占用cpu)

    执行结束、异常退出、线程的时间片用完后线程处于死亡状态

    堵塞状态的三种情况:

    位于对象等待池中的堵塞状态 wait()

    执行sleep()

    发出IO请求使线程受到阻塞。

    堵塞状态只能回到就绪状态,而不能回到运行状态。

    刚开始学不对的地方希望指正谢谢。

  • 相关阅读:
    Running ASP.NET Applications in Debian and Ubuntu using XSP and Mono
    .net extjs 封装
    ext direct spring
    install ubuntu tweak on ubuntu lts 10.04,this software is created by zhouding
    redis cookbook
    aptana eclipse plugin install on sts
    ubuntu open folderpath on terminal
    ubuntu install pae for the 32bit system 4g limited issue
    EXT Designer 正式版延长使用脚本
    用 Vagrant 快速建立開發環境
  • 原文地址:https://www.cnblogs.com/linlin0/p/6141363.html
Copyright © 2011-2022 走看看