java经典题目---2(转贴)

来源:互联网 发布:怎么网络监听 编辑:程序博客网 时间:2024/06/05 07:31

转自:http://topic.csdn.net/u/20080617/15/706679c5-e108-4ec0-801b-75728ad19fe6.html

18.做一个单子模式的类,只加载一次属性文件 package com.softeem.demo; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Properties; /** *@authorleno *单子模式,保证在整个应用期间只加载一次配置属性文件 */ publicclass Singleton {     privatestatic Singleton instance;     privatestaticfinal String CONFIG_FILE_PATH = "E://config.properties";     private Properties config;     private Singleton()     {       config = new Properties();       InputStream is;       try {           is = new FileInputStream(CONFIG_FILE_PATH);           config.load(is);           is.close();       } catch (FileNotFoundException e) {           // TODO Auto-generated catch block           e.printStackTrace();       } catch (IOException e) {           // TODO Auto-generated catch block           e.printStackTrace();       }     }     publicstatic Singleton getInstance()     {       if(instance==null)       {           instance = new Singleton();       }       returninstance;     }     public Properties getConfig() {       returnconfig;     }     publicvoid setConfig(Properties config) {       this.config = config;     }         } l    J2SE 19.拷贝一个目录(文件)到指定路径 /**     *拷贝一个目录或者文件到指定路径下     *@paramsource     *@paramtarget     */     publicvoid copy(File source,File target)     {       File tarpath = new File(target,source.getName());       if(source.isDirectory())       {           tarpath.mkdir();           File[] dir = source.listFiles();           for (int i = 0; i < dir.length; i++) {               copy(dir[i],tarpath);           }       }else       {           try {               InputStream is = new FileInputStream(source);               OutputStream os = new FileOutputStream(tarpath);               byte[] buf = newbyte[1024];               int len = 0;               while((len = is.read(buf))!=-1)               {                   os.write(buf,0,len);               }               is.close();               os.close();           } catch (FileNotFoundException e) {               // TODO Auto-generated catch block               e.printStackTrace();           } catch (IOException e) {               // TODO Auto-generated catch block               e.printStackTrace();           }       }     } 20.用JAVA中的多线程示例银行取款问题 packagecom.softeem.demo; /** *@authorleno *账户类 *默认有余额,可以取款 */ class Account {     privatefloatbalance = 1000;     publicfloat getBalance() {       returnbalance;     }     publicvoid setBalance(float balance) {       this.balance = balance;     }         /**     *取款的方法需要同步     *@parammoney     */     publicsynchronizedvoid withdrawals(float money)     {       if(balance>=money)       {           System.out.println("被取走"+money+"元!");           try {               Thread.sleep(1000);           } catch (InterruptedException e) {               // TODO Auto-generated catch block               e.printStackTrace();           }           balance-=money;       }       else       {           System.out.println("对不起,余额不足!");       }     }     } /** *@authorleno *银行卡 */ class TestAccount1 extends Thread {     private Account account;             public TestAccount1(Account account) {       this.account = account;     }     @Override     publicvoid run() {       account.withdrawals(800);       System.out.println("余额为:"+account.getBalance()+"元!");     }  } /** *@authorleno *存折 */ class TestAccount2 extends Thread {     private Account account;     public TestAccount2(Account account) {           this.account = account;       }     @Override     publicvoid run() {       account.withdrawals(700);       System.out.println("余额为:"+account.getBalance()+"元!");     }  } publicclass Test {     publicstaticvoid main(String[] args) {       Account account = new Account();       TestAccount1 testAccount1 = new TestAccount1(account);       testAccount1.start();       TestAccount2 testAccount2 = new TestAccount2(account);       testAccount2.start();     } } 21.用JAVA中的多线程示例火车站售票问题 package com.softeem.demo; /** *@authorleno *售票类 */ class SaleTicket implements Runnable {     inttickets = 100;     publicvoid run() {       while (tickets > 0) {           sale(); //或者下面这样实现 //        synchronized (this) { //            if (tickets > 0) { //                System.out.println(Thread.currentThread().getName() + "卖第" //                      + (100 - tickets + 1) + "张票"); //                tickets--; //            } //        }       }     }     publicsynchronizedvoid sale() {       if (tickets > 0) {           System.out.println(Thread.currentThread().getName() + "卖第"                   + (100 - tickets + 1) + "张票");           tickets--;       }     } } publicclass TestSaleTicket {     publicstaticvoid main(String[] args) {       SaleTicket st = new SaleTicket();       new Thread(st, "一号窗口").start();       new Thread(st, "二号窗口").start();       new Thread(st, "三号窗口").start();       new Thread(st, "四号窗口").start();     } } 22.用JAVA中的多线程示例生产者和消费者问题 package com.softeem.demo; class Producer implements Runnable { private SyncStack stack;     public Producer(SyncStack stack) {     this.stack = stack; }     publicvoid run() {       for (int i = 0; i < stack.getProducts().length; i++) {           String product = "产品"+i;           stack.push(product);           System.out.println("生产了: "+product);           try           {             Thread.sleep(200);           }           catch(InterruptedException e)           {             e.printStackTrace();           }       }     }     } class Consumer implements Runnable {     private SyncStack stack;     public Consumer(SyncStack stack) {     this.stack = stack; }     publicvoid run() {       for(int i=0;i <stack.getProducts().length;i++)           {           String product =stack.pop();           System.out.println("消费了: "+product);           try           {             Thread.sleep(1000);           }           catch(InterruptedException e)           {             e.printStackTrace();           }           }           } } class SyncStack {     private String[] products = new String[10];     privateintindex;     publicsynchronizedvoid push(String product)     {       if(index==product.length())       {           try {               wait();           } catch (InterruptedException e) {               // TODO Auto-generated catch block               e.printStackTrace();           }       }       notify();       products[index]=product;       index++;     }         publicsynchronized String pop()     {       if(index==0)       {           try {               wait();           } catch (InterruptedException e) {               // TODO Auto-generated catch block               e.printStackTrace();           }       }       notify();       index--;       String product = products[index];       return product;     }     public String[] getProducts() {       returnproducts;     }         } publicclass TestProducerConsumer {         publicstaticvoid main(String[] args) {       SyncStack stack=new SyncStack();       Producer p=new Producer(stack);       Consumer c=new Consumer(stack);       new Thread(p).start();       new Thread(c).start();       }     }