瞎学的几天 ----java多线程和线程池

Java多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。

 

1、继承Thread类实现多线程
继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,通过自己的类直接extend Thread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。例如:

 

[java] view plain copy
 
  1. public class MyThread extends Thread {  
  2.   public void run() {  
  3.    System.out.println("MyThread.run()");  
  4.   }  
  5. }  

在合适的地方启动线程如下:

[java] view plain copy
 
  1. MyThread myThread1 = new MyThread();  
  2. MyThread myThread2 = new MyThread();  
  3. myThread1.start();  
  4. myThread2.start();  
 


2、实现Runnable接口方式实现多线程
如果自己的类已经extends另一个类,就无法直接extends Thread,此时,必须实现一个Runnable接口,如下:

[java] view plain copy
 
  1. public class MyThread extends OtherClass implements Runnable {  
  2.   public void run() {  
  3.    System.out.println("MyThread.run()");  
  4.   }  
  5. }  

为了启动MyThread,需要首先实例化一个Thread,并传入自己的MyThread实例:

[java] view plain copy
 
  1. MyThread myThread = new MyThread();  
  2. Thread thread = new Thread(myThread);  
  3. thread.start();  

事实上,当传入一个Runnable target参数给Thread后,Thread的run()方法就会调用target.run(),参考JDK源代码:

[java] view plain copy
 
  1. public void run() {  
  2.   if (target != null) {  
  3.    target.run();  
  4.   }  
  5. }  

 

而且Thread实现类也是实现的runnable接口

 1  *
 2  * @author  unascribed
 3  * @see     Runnable
 4  * @see     Runtime#exit(int)
 5  * @see     #run()
 6  * @see     #stop()
 7  * @since   JDK1.0
 8  */
 9 public
10 class Thread implements Runnable {
11     /* Make sure registerNatives is the first thing <clinit> does. */
12     private static native void registerNatives();
13     static {
14         registerNatives();
15     }

 


3、接下来我们再讲讲线程的优先级设置以及一些常用的属性设置

Thread thread = new Thread();

在这个类里我们可以设置线程的优先级

 1 public class Test { 
 2         public static void main(String[] args) { 
 3                 Thread t1 = new MyThread1(); 
 4                 Thread t2 = new Thread(new MyRunnable()); 
 5                 t1.setPriority(10); 
 6                 t2.setPriority(1); 
 7 
 8                 t2.start(); 
 9                 t1.start(); 
10         } 
11 } 

设置线程的名字和id还有超时时间等等

Java线程的优先级从1到10级别,值越大优先级越高

 最后附上一个号连接

http://blog.csdn.net/aboy123/article/details/38307539

 
posted @ 2016-09-20 13:46 奋斗,坚持 阅读(...) 评论(...)  编辑 收藏