package cnhingeyangjun; 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 { Threadsleep() } catch (InterruptedException e) { eprintStackTrace() } outputeroutput(linghongming) } } })start() /* 线程 output 方法 */ new Thread(new Runnable(){ public void run() { while(true){ try { Threadsleep() } catch (InterruptedException e) { eprintStackTrace() } outputeroutput(zhangxiaoxiang) } } })start() } /* 定义一个内部类中定义一个方法专门打印一个用户姓名如果不加同步锁 侧会出现线程安全会导致打出信息混乱如果要实现原子性那么就必须加同步锁同步锁必须针对一个对象 */ class Outputer{ public synchronized void output(String name){ int len = namelength() // synchronized(this)这是另一种同步方法 for (int i = ; i < len; i++) { Systemoutprint(namecharAt(i)) } Systemoutprintln() } } } |