创建线程

创建线程

1.继承Thread类

步骤:

1.创建一个Thread类的子类。

2.重写Thread类中的run()方法。

3.创建Thread类子类的对象。

4.子类对象调用start()方法,开启新的线程。

public class MyThread extends Thread{//1.创建一个Thread类的子类。
    @Override
   public void run() {//2.重写Thread类中的run()方法
         //获取线程名称
       String name = getName();
       System.out.println("^MyThreadname---"+name);
  }
}

 

public class GetName {
   public static void main(String[] args) {
       MyThread myThread = new MyThread();//3.创建Thread类子类的对象。
       myThread.start();//子类对象调用start()方法,开启新的线程。

       
       //没有继承Thread类,只能通过currentThread来获取当前的主线程名称
       String name = currentThread().getName();
       System.out.println("*main--" + name);
  }
}

 

2.实现Runnable接口

步骤:

1.定义一个Runnable接口的实现类,并重写run()方法。

2.创建Runnable接口实现类的对象。

3.将接口实现类对象作为target来创建Thread对象。

4.Thread对象调用start()方法。

public class MyRunableImpl implements Runnable{//1.定义一个Runnable接口的实现类,并重写run()方法。
   @Override
   public void run() {
       for (int i = 0; i <5 ; i++) {
           System.out.println(Thread.currentThread().getName()+"--"+i);
      }
  }
}
public class Application {
   public static void main(String[] args) {

       //定义一个Runnable
       MyRunableImpl myRunable = new MyRunableImpl();//2.创建Runnable接口实现类的对象。
       Thread thread = new Thread(myRunable);//3.将接口实现类对象作为target来创建Thread对象。
       thread.start();//4.Thread对象调用start()方法。

  }
}
第二种方法的好处

1.避免继承带来的局限性

2.增强程序的拓展性,降低程序的耦合性。将设置线程任务和开启线程分离。

 

线程池

JVM根据用户参数创建一定数量的线程,放进队列中。在线程创建以后启动这些任务。当线程数量多与任务,多出的线程会在队列中等候。相反,当用户创建的线程少于任务时,任务会在等候。当有任务执行完毕,线程回归线程池,线程调度器发现可用线程,从而会从取出任务执行。

步骤:

1.使用线程池的工厂类Executors里面的提供的静态方法,newFixedThreadPool。生产指定数量的线程。

2.创建Runnable接口的实现类,重写run()方法。

3.调用ExecutorService中的submit方法开启线程,需要传递Runnable接口实现类的对象。

 

ExecutorService threadPool = Executors.newFixedThreadPool(2);//1.使用线程池的工厂类Executors里面的提供的静态方法,newFixedThreadPool。生产指定数量的线程。
threadPool.submit(impl);//调用ExecutorService中的submit方法开启线程,需要传递Runnable接口实现类的对象。

 

 

 

 

 
原文地址:https://www.cnblogs.com/stydejava/p/13436560.html