黑马程序员_java中的多线程2

来源:互联网 发布:陆维开料软件 编辑:程序博客网 时间:2024/05/23 19:03

------- android培训、java培训、期待与您交流! ----------

一.java多线程编写方法

     方法二:

                   1.编写Runnable接口实现类,并覆盖Runnable接口中的run()方法。run()方法体中放置线程执行代码。

                    2.创建实现类的对象。

                    3.调用Thread类的构造函数,创建Thread类的对象即多线程对象。(调用Thread类的构造函数时,要将Runnable接口实现类对象作为参数传递给构造函数。如果创建多个线程对象时,传递的是同一个Runnable接口实现类对象,那么多个线程就共享了这个Runnable接口实现类对象)

                    4.调用Thread类对象的start()方法开启线程(该方法一执行,程序就会增加一条执行路径)。注:开启线程不代表线程执行代码会立即被执行,只有等线程获得计算机资源后,线程代码在会被执行。

     示例代码:

                //1.编写Runable接口实现类

        class Demo implements Runnable{

                 //定义一个私有的成员变量

                  private int tick = 100;

                 //覆盖Runnable接口中的run()方法

               public void run(){

                    //编写多线程的执行代码

                  while(true){

                       if(tick>0){

                               //Thread.currentThread().getName()——获得当前运行的线程对象的名字。

                              System.out.println(Thread.currentThread().getName()+"剩余票数"+tick--);

                       }

                  }

              }

        }

         //编写测试类。

       public class Test(){

            public static void main (String[] args){

                  //2.创建实现类对象

                       Demo d= new Demo();

                  //3.调用Thread类的构造函数,创建Thread类的对象(即线程对象)。将实现类对象传递给不同线程对象。使不同线程共享同一个数据。
                        Thread t1 = new Thread(d);

                        Thread t2 = new Thread(d);

                         Thread t3 = new Thread(d);

                   //4.调用Thread类的对象t 的start()方法开启线程

                         t1.start();

                         t2.start();

                         t3.start();

            }

       }

            方法一与方法二的区别:

            方法一:使用Thread类的子类创建线程对象。线程执行代码位于Thread类的子类run()方法中

            方法二:使用Thread类创建线程对象,在创建对象时,可向构造函数中传递同一个数据,实现不同线程间的数据共享。线程执行代码位于Runable接口实现类的run()方法中。

          

二.线程的五种常见状态

         1.线程被创建。--------调用线程类(Thread的子类)的构造函数,创建线程对象。

          2.准备状态。----------调用线程对象的start()方法,开启线程。多个线程间相互争夺获取计算机资源。

          3.运行状态。----------线程争夺获取了计算机资源后,线程对象的run()方法中的代码被执行,线程处于运行状态。

          4.线程休息状态。----------调用线程对象的sleep(long millis)方法,使线程处于休息状态。(休息状态下的线程不会争夺获取计算机资源,所以线程对象的run()方法中的代码不会被执行)休息的时间为 mills毫秒。时间过后,线程会自动转换为准备状态。

                                         -----------调用线程对象的wait()方法,也能使线程处于休息状态。但是线程不会自动转换为准备状态,要使用线程对象的notify()方法来转换。

          5.线程被结束。----------调用对象的stop()方法结束线程,该方法已经过时,不建议使用。

                                     ----------当run()方法中的代码执行完后线程会自动结束。




原创粉丝点击