1.拷貝一個(gè)目錄(文件)到指定路徑
/** *拷貝一個(gè)目錄或者文件到指定路徑下 BR> *@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(); } } }
|
2.用JAVA中的多線程示例銀行取款問(wèn)題
packagecom.softeem.demo;
/** *@authorleno *賬戶類(lèi) *默認(rèn)有余額,可以取款 */ 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("對(duì)不起,余額不足!"); } } }
/** *@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(); } }
|
3.用JAVA中的多線程示例火車(chē)站售票問(wèn)題
package com.softeem.demo;
/** *@authorleno *售票類(lèi) */ class SaleTicket implements Runnable { inttickets = 100;
publicvoid run() { while (tickets > 0) { sale(); //或者下面這樣實(shí)現(xiàn) // synchronized (this) { // if (tickets > 0) { // System.out.println(Thread.currentThread().getName() + "賣(mài)第" // + (100 - tickets + 1) + "張票"); // tickets--; // } // } } }
publicsynchronizedvoid sale() { if (tickets > 0) { System.out.println(Thread.currentThread().getName() + "賣(mài)第" + (100 - tickets + 1) + "張票"); tickets--; } }
}
publicclass TestSaleTicket {
publicstaticvoid main(String[] args) { SaleTicket st = new SaleTicket(); new Thread(st, "一號(hào)窗口").start(); new Thread(st, "二號(hào)窗口").start(); new Thread(st, "三號(hào)窗口").start(); new Thread(st, "四號(hào)窗口").start();
} }
|
4.用JAVA中的多線程示例生產(chǎn)者和消費(fèi)者問(wèn)題
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 = "產(chǎn)品"+i; stack.push(product); System.out.println("生產(chǎn)了: "+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 { String product =stack.pop(); System.out.println("消費(fèi)了: "+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(); } }
|
【編輯推薦】
- IT職場(chǎng)培訓(xùn) 程序員Java面試中的32個(gè)陷阱
- 快速啟動(dòng)一個(gè)Java Web編程框架
- Java中靜態(tài)數(shù)組與動(dòng)態(tài)數(shù)組
- 討論:Java究竟是傳值還是傳引用?
- Java編譯器中對(duì)String對(duì)象的優(yōu)化