知识大全 线程的互斥与同步通信问题
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相关参考