Java线程总结

 1、线程优先级

线程的优先级分为10级,分别用1到10的整数代表,默认情况是5。上面的t2.setPriority(Thread.MAX_PRIORITY)等价与t2.setPriority(10)

  
  
  
  
  1. public class MyThread implements Runnable 
  2. {  
  3.  
  4. public void run() 
  5. {  
  6. System.out.println("My Name is "+Thread.currentThread().getName());  
  7. }  
  8. public static void main(String[] args) 
  9. Thread t1=new Thread(new MyThread()); 
  10. Thread t2=new Thread(new MyThread()); 
  11. Thread t3=new Thread(new MyThread()); 
  12. t2.setPriority(Thread.MAX_PRIORITY);//赋予最高优先级 
  13. t1.start(); 
  14. t2.start(); 
  15. t3.start(); 
  16. }  

2、线程睡眠

  
  
  
  
  1. public class MyThread implements Runnable { 
  2.     public void run() { 
  3.         try { 
  4.             int sleepTime = (int) (Math.random() * 100);// 产生随机数字, 
  5.             Thread.currentThread().sleep(sleepTime);// 让其休眠一定时间,时间又上面sleepTime决定 
  6.             // public static void sleep(long millis)throw InterruptedException 
  7.             // (API) 
  8.             System.out.println(Thread.currentThread().getName() + " 睡了 " 
  9.                     + sleepTime); 
  10.         } catch (InterruptedException ie)// 由于线程在休眠可能被中断,所以调用sleep方法的时候需要捕捉异常 
  11.         { 
  12.             ie.printStackTrace(); 
  13.         } 
  14.     } 
  15.  
  16.     public static void main(String[] args) { 
  17.         Thread t1 = new Thread(new MyThread()); 
  18.         Thread t2 = new Thread(new MyThread()); 
  19.         Thread t3 = new Thread(new MyThread()); 
  20.         t1.start(); 
  21.         t2.start(); 
  22.         t3.start(); 
  23.     } 

3、线程组

 

  
  
  
  
  1. public class MyThread implements Runnable { 
  2.     public void run() { 
  3.         try { 
  4.             int sleepTime = (int) (Math.random() * 100);// 产生随机数字, 
  5.             Thread.currentThread().sleep(sleepTime);// 让其休眠一定时间,时间又上面sleepTime决定 
  6.             // public static void sleep(long millis)throw InterruptedException 
  7.             // (API) 
  8.             System.out.println(Thread.currentThread().getName() + " 睡了 " 
  9.                     + sleepTime); 
  10.         } catch (InterruptedException ie)// 由于线程在休眠可能被中断,所以调用sleep方法的时候需要捕捉异常 
  11.         { 
  12.             ie.printStackTrace(); 
  13.         } 
  14.     } 
  15.  
  16.     public static void main(String[] args)  { 
  17.     /*************************************** 
  18.     ThreadGroup(String name)  
  19.     ThreadGroup(ThreadGroup parent, String name)  
  20.     ***********************************/ 
  21.     ThreadGroup group1=new ThreadGroup("group1"); 
  22.     ThreadGroup group2=new ThreadGroup(group1,"group2"); 
  23.     Thread t1=new Thread(group2,new MyThread()); 
  24.     Thread t2=new Thread(group2,new MyThread()); 
  25.     Thread t3=new Thread(group2,new MyThread()); 
  26.     t1.start(); 
  27.     t2.start(); 
  28.     t3.start(); 
  29.     } 
  30.  

4、共享

可能你注意到了在使用wait and notify方法得时候我使用了synchronized块来包装这两个方法,这是由于调用这两个方法的时候线程必须获得锁,也就是上面代码中的lock[],如果你不用synchronized包装这两个方法的得话,又或则锁不一是同一把,比如在MyThread_2中synchronized(lock)改为synchronized(this),那么执行这个程序的时候将会抛出java.lang.IllegalMonitorStateException执行期异常。另外wait and notify方法是Object中的,并不在Thread这个类中。最后你可能注意到了这点:int[] in=new int[0];为什么不是创建new Object而是一个0长度的数组,那是因为在java中创建一个0长度的数组来充当锁更加高效。

  
  
  
  
  1. class MyThread_1 extends Thread { 
  2.     Object lock; 
  3.  
  4.     public MyThread_1(Object o) { 
  5.         lock = o; 
  6.     } 
  7.  
  8.     public void run() { 
  9.         try { 
  10.             synchronized (lock) { 
  11.                 System.out.println("Enter Thread_1 and wait"); 
  12.                 lock.wait(); 
  13.                 System.out.println("be notified"); 
  14.             } 
  15.         } catch (InterruptedException e) { 
  16.         } 
  17.     } 
  18.  
  19. class MyThread_2 extends Thread { 
  20.     Object lock; 
  21.  
  22.     public MyThread_2(Object o) { 
  23.         lock = o; 
  24.     } 
  25.  
  26.     public void run() { 
  27.         synchronized (lock) { 
  28.             System.out.println("Enter Thread_2 and notify"); 
  29.             lock.notify(); 
  30.         } 
  31.     } 
  32.  
  33. public class MyThread { 
  34.     public static void main(String[] args) { 
  35.         int[] in = new int[0];// notice 
  36.         MyThread_1 t1 = new MyThread_1(in); 
  37.         MyThread_2 t2 = new MyThread_2(in); 
  38.         t1.start(); 
  39.         t2.start(); 
  40.     } 

 

你可能感兴趣的:(java,线程,职场,休闲)