java多线程:3、线程互斥

来源:互联网 发布:手机淘宝会员怎么注册 编辑:程序博客网 时间:2024/05/16 08:19

多线程互斥问题在生活中随处可见,如买票、银行转账等等。。。

实例代码:

public class ThreadTest2 {    final SysOut sysOut=new SysOut();    public static void main(String[] args) {        ThreadTest2 test=new ThreadTest2();        new Thread(new Runnable(){            @Override            public void run() {                // TODO Auto-generated method stub                while(true){                    try {                        Thread.sleep(50);                    } catch (InterruptedException e) {                        // TODO Auto-generated catch block                        e.printStackTrace();                    }                    test.sysOut.outer("****************");                }            }        }).start();        new Thread(new Runnable(){            @Override            public void run() {                // TODO Auto-generated method stub                while(true){                    try {                        Thread.sleep(50);                    } catch (InterruptedException e) {                        // TODO Auto-generated catch block                        e.printStackTrace();                    }                    test.sysOut.outer("!!!!!!!!!!!!!!!!");                }            }        }).start();    }    class SysOut{        public void outer(String name){            for(int i=0,n=name.length();i<n;i++){                System.out.print(name.charAt(i));            }            System.out.println();        }    }}

输入结果:
两个字符串混乱的输出

如果希望两个字符串都可以完整输出可以使用以下几种方法
1、使用synchronized块

class SysOut{        public void outer(String name){            synchronized(this){                for(int i=0,n=name.length();i<n;i++){                    System.out.print(name.charAt(i));                }                System.out.println();            }        }    }

2、在方法上添加synchironized关键字

public synchronized void outer(String name){        for(int i=0,n=name.length();i<n;i++){            System.out.print(name.charAt(i));        }        System.out.println();}

要想使多线程之间互斥,多线程之间必须使用相同的监视对象

0 0
原创粉丝点击