传统线程互斥技术(三)

来源:互联网 发布:登录淘宝网电脑版 编辑:程序博客网 时间:2024/05/20 11:46

1、使用synchronized关键字,来保证线程安全问题,下面事事例代码:

public class TranditionalThreadSynchronized {


    public static void main(String args[]) {
        Outputer outputer = new Outputer();
        new Thread(new Runnable() {


            @Override
            public void run() {
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                outputer.output2("zhangxiaoxiang");
            }
        }).start();
        new Thread(new Runnable() {


            @Override
            public void run() {
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                outputer.output2("lihuoming");
            }
        }).start();
    }


    static class Outputer {
        public void output(String name) {
            int len = name.length();
            for (int i = 0; i < len; i++) {
                System.out.print(name.charAt(i));
            }
            System.out.println();


        }
        // synchronized 就是同步的意思原子性,排他性,已经有人进来了,其他人就进不来了,必须要等这个人出去了,其他人才能进来,这里面不能使用name做为同步对象
        public synchronized void output2(String name) {
            // 这里面默认使用的同步锁是this
            int len = name.length();
            for (int i = 0; i < len; i++) {
                System.out.print(name.charAt(i));
            }
            System.out.println();
        }
        public static synchronized void output3(String name){
            // 这里面静态方法使用的同步锁是字节码对象Outputer.class
            int len = name.length();
            for(int i=0;i<len;i++){
                    System.out.print(name.charAt(i));
            }
            System.out.println();
        }   
    }
}

0 0