知识大全 线程的互斥与同步通信问题

Posted

篇首语:一知半解的人,多不谦虚;见多识广有本领的人,一定谦虚。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 线程的互斥与同步通信问题相关的知识,希望对你有一定的参考价值。

    package cn hinge yangjun;        public class TraditionalThreadSynchronized         /*        *   线程的安全 通过以下实例便可以理解为了防止没有加线程同步锁 会导致线程之间因cpu 导致打印出的信息会乱         *   启动 个线程 : a 线程打印 yangrenjun b 线程打印 yangtao  如果不加同步锁 侧会出现 ing li 等信息        *        *   静态方法中不能实例化内部类对象 因为内部类一个重要特点就是可以访问外部类的成员变量 如果可以访问外部成员变量 意味一定存在        *   实例对象 而此时mian方法是静态方法 而静态方法执行的时候可以不用实例化对象 此时二者矛盾        *   内部内不能访问局部变量 要加关键字 final        *        *   线程的安全 多个线程对同一个对象进行访问 取这个对象中的数据 并对数据进行操作 比如银行转帐就是很明显的线程安全实例        *        */        public static void main(String[] args)         // 静态方法中不能实例化内部类实例对象 为什么呢?        //回答 静态方法中不能实例化内部类对象 因为内部类一个重要特点就是可以访问外部类的成员变量 如果可以访问外部成员变量 意味一定存在        //实例对象 而此时mian方法是静态方法 而静态方法执行的时候可以不用实例化对象 此时二者矛盾 要通过外部对象调用内部对象才可以访问(意思是想要实例化内部类必须要定义个外部对象)        // final Outputer outputer = new Outputer()         new TraditionalThreadSynchronized() init()                 private void init()        final Outputer outputer = new Outputer() // 内部类不能访问局部变量 要想访问必须声明是 fianl 类型的内部类 内部类对象必须被外部类对象直接调用         /* 线程 调用 output 方法*/        new Thread(new Runnable()        public void run()         while(true)        try         Thread sleep( )         catch (InterruptedException e)         e printStackTrace()                 outputer output( linghongming )                         ) start()         /* 线程 output 方法  */        new Thread(new Runnable()        public void run()         while(true)        try         Thread sleep( )         catch (InterruptedException e)         e printStackTrace()                 outputer output( zhangxiaoxiang )                         ) start()                 /* 定义一个内部类中定义一个方法专门打印一个用户姓名 如果不加同步锁 侧会出现线程安全 会导致打出信息混乱 如果要实现原子性那么就必须加同步锁 同步锁必须针对一个对象 */        class Outputer        public synchronized void  output(String name)        int len = name length() // synchronized(this) 这是另一种同步方法        for (int i = ; i < len; i++)         System out print(name charAt(i))                 System out println()                         cha138/Article/program/Java/gj/201311/27557

相关参考