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

转自: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(); 

      } 

    } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值