并发:
下面写2个实例,简单了解并发:
1、2个线程交替打印技术和偶数
public class Num { int i = 1; boolean flag = true; } public class Main { public static void main(String[] args) { final Num num = new Num(); Thread a = new Thread(new Runnable(){ public void run() { while(num.i < 100){ synchronized(num){ if(num.flag){ try { num.wait(); } catch (InterruptedException e) { e.printStackTrace(); } }else{ System.out.println(Thread.currentThread().getName()+" i :"+num.i); num.i ++; num.flag = true; num.notify(); } } } } }); Thread b = new Thread(new Runnable(){ public void run() { while(num.i < 100){ synchronized(num){ if(!num.flag){ try { num.wait(); } catch (InterruptedException e) { e.printStackTrace(); } }else{ System.out.println(Thread.currentThread().getName()+" i :"+ num.i); num.i++; num.flag = false; num.notify(); } } } } }); a.start(); b.start(); } }
2、2个线程交替写入字符串到同一个文件,a线程写入‘I love you’,b线程写入‘So do I’
public class WriteFile { private String fileName = "d:\\b.txt"; int i = 0; boolean flag = true; public WriteFile() { } public void writeFile1(){ FileOutputStream fos = null; try { File file = new File(fileName); if(!file.exists()){ file.mkdirs(); } fos = new FileOutputStream(fileName, true); fos.write("I love you".getBytes()); } catch (IOException e) { e.printStackTrace(); }finally{ try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } public void writeFile2(){ FileOutputStream fos = null; try { fos = new FileOutputStream(fileName, true); fos.write("So do I".getBytes()); } catch (IOException e) { e.printStackTrace(); }finally{ try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } } public class Main { public static void main(String[] args) { final WriteFile wf = new WriteFile(); int i = 0; Thread a = new Thread(new Runnable(){ public void run(){ while(wf.i < 20){ synchronized(wf){ if(wf.flag){ try { wf.wait(); } catch (InterruptedException e) { e.printStackTrace(); } }else{ System.out.println(Thread.currentThread().getName()); wf.writeFile1(); wf.i++; wf.flag = true; wf.notify(); } } } } }); Thread b = new Thread(new Runnable(){ public void run(){ while(wf.i < 20){ synchronized(wf){ if(!wf.flag){ try { wf.wait(); } catch (InterruptedException e) { e.printStackTrace(); } }else{ System.out.println(Thread.currentThread().getName()); wf.writeFile2(); wf.i++; wf.flag = false; wf.notify(); } } } } }); a.start(); b.start(); } }