并发的使用

并发:

下面写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();
    }

}

猜你喜欢

转载自www.cnblogs.com/zhangcece/p/8876797.html
今日推荐