编程小知识点范例-2

http://tianya23.blog.51cto.com/1081650/591809

 

【注】
windows设置环境变量,例如设置jdk为1.7.0版本(一定要把%path%加上):
set path="D:\ProgramFiles\Java\jdk1.7.0\bin";%path%

 

1、取得当前进程下的所有线程

  
  
  
  
  1. public static String[] getThreadNames() { 
  2.         ThreadGroup group = Thread.currentThread().getThreadGroup(); 
  3.         ThreadGroup parent = null
  4.         while ((parent = group.getParent()) != null) { 
  5.             group = parent; 
  6.         } 
  7.         Thread[] threads = new Thread[group.activeCount()]; 
  8.         group.enumerate(threads); 
  9.         java.util.HashSet<String> set = new java.util.HashSet<String>(); 
  10.         for (int i = 0; i < threads.length; ++i) { 
  11.             if (threads[i] != null && threads[i].isAlive()) { 
  12.                 try { 
  13.                     set.add(threads[i].getThreadGroup().getName() + "," 
  14.                             + threads[i].getName() + "," 
  15.                             + threads[i].getPriority()); 
  16.                 } catch (Throwable e) { 
  17.                     e.printStackTrace(); 
  18.                 } 
  19.             } 
  20.         } 
  21.         String[] result = (String[]) set.toArray(new String[0]); 
  22.         java.util.Arrays.sort(result); 
  23.         return result; 
  24.     } 

 2、Java多线程--让主线程等待所有子线程执行完毕

参考:http://3ccoder.iteye.com/blog/581476

  1. public class ImportThread extends Thread {  
  2. private CountDownLatch threadsSignal;  
  3. public ImportThread(CountDownLatch threadsSignal) {  
  4. this.threadsSignal = threadsSignal;  
  5. }  
  6. @Override  
  7. public void run() {  
  8. System.out.println(Thread.currentThread().getName() + "开始...");  
  9. //Do somethings  
  10. threadsSignal.countDown();//线程结束时计数器减1  
  11. System.out.println(Thread.currentThread().getName() + "结束. 还有" + threadsSignal.getCount() + " 个线程");  
  12. }  
  13. }  

 

 main:

  1. CountDownLatch threadSignal = new CountDownLatch(threadNum);//初始化countDown  
  2. for (int ii = 0; ii < threadNum; ii++) {//开threadNum个线程  
  3. final Iterator<String> itt = it.get(ii);  
  4. Thread t = new ImportThread(itt,sql,threadSignal);  
  5. t.start();  
  6. }  
  7. threadSignal.await();//等待所有子线程执行完  
  8. System.out.println(Thread.currentThread().getName() + "结束.");//打印结束标记  

 

3、生产者消费者问题

  
  
  
  
  1. public class ProducerTest { 
  2.     public static void main(String[] args) { 
  3.         Queue q = new Queue(); 
  4.         Producer t1 = new Producer(q); 
  5.         Consumer t2 = new Consumer(q); 
  6.         t1.start(); 
  7.         t2.start(); 
  8.     } 
  9.  
  10. class Producer extends Thread { 
  11.     Queue q; 
  12.  
  13.     public Producer(Queue q) { 
  14.         this.q = q; 
  15.     } 
  16.  
  17.     public void run() { 
  18.         for (int i = 0; i < 10; i++) { 
  19.             q.put(i); 
  20.             System.out.println("Producer put:" + i); 
  21.         } 
  22.     } 
  23.  
  24. class Consumer extends Thread { 
  25.     Queue q; 
  26.  
  27.     public Consumer(Queue q) { 
  28.         this.q = q; 
  29.     } 
  30.  
  31.     public void run() { 
  32.         while (true) { 
  33.             System.out.println("Consumer get:" + q.get()); 
  34.         } 
  35.     } 
  36.  
  37. class Queue { 
  38.     int     value; 
  39.     boolean bFull = false
  40.  
  41.     public synchronized void put(int i) { 
  42.         if (!bFull) { 
  43.             value = i; 
  44.             bFull = true
  45.             notify(); 
  46.         } 
  47.         try { 
  48.             wait(); 
  49.         } catch (Exception e) { 
  50.             e.printStackTrace(); 
  51.         } 
  52.     } 
  53.  
  54.     public synchronized int get() { 
  55.         if (!bFull) { 
  56.             try { 
  57.                 wait(); 
  58.             } catch (Exception e) { 
  59.                 e.printStackTrace(); 
  60.             } 
  61.         } 
  62.         bFull = false
  63.         notify(); 
  64.         return value; 
  65.  
  66.     } 

 4、Comparable接口使用

  
  
  
  
  1. class Student implements Comparable 
  2.     int num; 
  3.     String name; 
  4.     static class StudentComparator implements Comparator 
  5.     { 
  6.         public int compare(Object o1,Object o2) 
  7.         { 
  8.             Student s1=(Student)o1; 
  9.             Student s2=(Student)o2; 
  10.             int result=s1.num > s2.num ? 1 : (s1.num==s2.num ? 0 : -1); 
  11.             if(result==0
  12.             { 
  13.                 result=s1.name.compareTo(s2.name); 
  14.             } 
  15.             return result; 
  16.         } 
  17.     } 
  18.     Student(int num,String name) 
  19.     { 
  20.         this.num=num; 
  21.         this.name=name; 
  22.     } 
  23.      
  24.     public int compareTo(Object o) 
  25.     { 
  26.         Student s=(Student)o; 
  27.         return num > s.num ? 1 : (num==s.num ? 0 : -1); 
  28.     } 
  29.     public String toString() 
  30.     { 
  31.         return num+":"+name; 
  32.     } 

 如要求先name,后age,则可参考如下:

  
  
  
  
  1. class Student implements Comparable<Object> { 
  2.     private String name; 
  3.     private int age; 
  4.  
  5.     public Student(String name, int age) { 
  6.         super(); 
  7.         this.name = name; 
  8.         this.age = age; 
  9.     } 
  10.  
  11.     @Override 
  12.     public int compareTo(Object o) { 
  13.         Student student = null
  14.         if (o instanceof Student) { 
  15.             student = (Student) o; 
  16.         } 
  17.         int ret1 = this.name.compareTo(student.name); 
  18.         // int ret2 = this.age - student.age; 
  19.         return ret1 != 0 ? ret1 : (this.age > student.age ? 1 
  20.                 : (this.age == student.age ? 0 : -1)); 
  21.  
  22.     } 

 5、配置文件覆盖方法

  
  
  
  
  1. String requestedFile = System.getProperty(PROPERTIES_FILE); 
  2.         String propFileName = requestedFile != null ? requestedFile 
  3.                 : "quartz.properties"

 6、static final

一个既是static又是final的字段只占据一段不能改变的存储空间。 带有恒定初始值(即,编译时常量)的static final基本类型全用大写字母命名,并且字与字之间用下划线隔开。如java.lang.byte类里对byte类型的最小值定义:

public  static  final  byte     MIN_VALUE  = -128;

更多参考:http://blog.csdn.net/tiannet/article/details/2593472

 

 

 

 

 

 

 

 

 

 

 

 

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