python 文件内容对比操作
2012-09-01 14:53
453 查看
每个线程都有自己的空间去暂存数据
当有一份数据在A,B线程之间共享
那么在A线程中改变了B是不会马上知道的
example
输出:
同理
这段代码也是线程不安全的,当A线程已经调用过set方法,在A线程本地存储的变量写回到公共空间前B线程依然可能通过get方法获得已经过期的数据。
如何解决?
两种方式
A 同步
B Volatile关键字
当一个域声明为volatile类型后,它确保对一个变量的更新以可预见的方式告知其他的线程。volatile变量不会缓存在寄存器或者缓存在在对其他处理器隐藏的地方。所以,读取一个volitile类型的时,总会返回由某一线程所写入的最新值。
当然volatile只能保证可见性,而加锁可以保证可见性和原子性。
以下代码
任然不能保证在多线程下正常工作,原因 原子性
当有一份数据在A,B线程之间共享
那么在A线程中改变了B是不会马上知道的
example
/** * 共享对象 * 多个对象在没有同步的情况下会发生可见性的错误 */ public class SharingObjects1 { private static boolean ready; private static int number; private static class ReaderThread extends Thread{ @Override public void run(){ while(!ready){ Thread.yield(); System.out.println(number); } System.out.println("thread "+Thread.currentThread().getId()+" over"); } public static void main(String[] args) { new ReaderThread().start(); number = 42; ready = true; System.out.println("thread "+Thread.currentThread().getId()+" over"); } } }
输出:
0 0 0 0 thread 11 over thread 1 over
同理
package com.taobao.threadlearning.simple; public class SharingObjects2 { class SynchronizedInteger{ private int value; public int getValue() { return value; } public void setValue(int value) { this.value = value; } } }
这段代码也是线程不安全的,当A线程已经调用过set方法,在A线程本地存储的变量写回到公共空间前B线程依然可能通过get方法获得已经过期的数据。
如何解决?
两种方式
A 同步
B Volatile关键字
当一个域声明为volatile类型后,它确保对一个变量的更新以可预见的方式告知其他的线程。volatile变量不会缓存在寄存器或者缓存在在对其他处理器隐藏的地方。所以,读取一个volitile类型的时,总会返回由某一线程所写入的最新值。
当然volatile只能保证可见性,而加锁可以保证可见性和原子性。
以下代码
volatile int i; public int IncAndGet(){ i++; return i; }
任然不能保证在多线程下正常工作,原因 原子性
相关文章推荐
- Python 3.6 读取并操作文件内容的实例
- Python文件操作,open读写文件,追加文本内容实例
- Python文件操作,open读写文件,追加文本内容
- Python自动化运维_文件内容差异对比分析
- Python入门:文件内容去重操作
- Python使用difflib对比两个文件操作实例
- python中文件的基本操作,以及一个文件内容分割的联系!
- python 对比两个文件内容或字符串内容时的换行符
- python中的文件内容操作
- 【Python】监控文件内容增删改操作变化
- 【Python/PE】python中实现文件操作的几种功能(删除指定目录下的所有内容,文件复制等)
- Python文件操作——逐行插入内容
- 文件内容差异对比-python
- Python文件操作,with open as追加文本内容实例
- Python使用difflib对比两个文件操作实例
- java与python在处理大文件操作上的对比
- Python文件操作---合并文本文件内容
- python文件操作--指定行下一行加入指定内容
- Python使用difflib对比两个文件操作实例
- Python文件操作之合并文本文件内容示例代码