object

java中volatile,synchronized关键字

人盡茶涼 提交于 2020-03-30 12:59:54
volatile是变量修饰符,而synchronized则是作用于一段代码或方法;如下三句get代码: 1 int i1; 2 int geti1() {return i1;} 3 4 volatile int i2; 5 int geti2() {return i2;} 6 7 int i3; 8 synchronized int geti3() {return i3;} geti1() 得到存储在当前线程中i1的数值。多个线程有多个i1变量拷贝,而且这些i1之间可以相互不同。换句话说,另一个线程可能已经改变了它线程内的i1值,而这个值可以和当前线程中的i1值不相同。 在Java内存模型中,有main memory(主内存区域),这里存放了变量目前的“准确值”,每个线程也有自己的memory(例如寄存器)。为了性能,一个线程会在自己的memory中保存要访问的变量的副本。这样就会出现同一个变量在某个瞬间,在一个线程的memory中的值可能与另外一个线程memory的值,或者main memory的值不一致的情况。因此实际上存在一种可能:main memory的值i1值是1,线程1里的i1是2,线程2里的i1值是3,这在线程1和线程2都改变了他们各自的i1值,而且这个改变还没来得及传给main memory 或其他线程时就会发生。 geti2() 得到的是main

Java中关键字volatile 和 synchronized 的作用和区别

邮差的信 提交于 2020-03-30 12:59:41
volatile是变量修饰符,而synchronized则是作用于一段代码或方法 ;如下三个get方法的代码: 1 int i1; 2 int geti1() {return i1;} 3 4 volatile int i2; 5 int geti2() {return i2;} 6 7 int i3; 8 synchronized int geti3() {return i3;} geti1() 得到存储在当前线程中i1的数值。多个线程有多个i1变量拷贝,而且这些i1之间可以相互不同。换句话说,另一个线程可能已经改变了它线程内的i1值,而这个值可以和当前线程中的i1值不相同。 在Java内存模型中,有main memory(主内存区域),这里存放了变量目前的“准确值”,每个线程也有自己的memory(例如寄存器)。为了性能,一个线程会在自己的memory中保存要访问的变量的副本。这样就会出现同一个变量在某个瞬间,在一个线程的memory中的值可能与另外一个线程memory的值,或者main memory的值不一致的情况。因此实际上存在一种可能:main memory的值i1值是1,线程1里的i1是2,线程2里的i1值是3,这在线程1和线程2都改变了他们各自的i1值,而且这个改变还没来得及传给main memory 或其他线程时就会发生。 geti2() 得到的是main

类接口/Class Interface

眉间皱痕 提交于 2020-03-30 08:46:57
在查看Object类的定义时发现Object使用了 ClassInterface,而且是 ClassInterfaceType . AutoDual 故查看一下具体什么,原来是类接口是为互操作而设计的,其中写到托管代码中基类或接口的中顺序也会影响互操作,真是不应乱该动代码。:) 类接口 是未在托管代码中显式定义的接口,它将公开在 .NET 对象上显式公开的所有公共方法、属性、字段和事件。 此接口可以是双绑定接口,也可以是仅调度接口。 类接口将接收 .NET 类本身的名称,并在名称前加有下划线。 例如,对于 Mammal 类,类接口为 _Mammal。 对于派生类,类接口还会公开基类的所有公共方法、属性和字段。 派生类也会为每个基类公开一个类接口。 例如,如果 Mammal 类扩展 MammalSuperclass 类,而 MammalSuperclass 本身又扩展 System.Object,.NET 对象将向 COM 客户端公开三个名为 _Mammal、_MammalSuperclass 和 _Object 的接口。 http://msdn.microsoft.com/zh-cn/library/4fcadw4a.aspx ClassInterfaceAttribute 类: http://msdn.microsoft.com/zh-cn/library/system

IOS中通知中心(NSNotificationCenter)的使用总结

无人久伴 提交于 2020-03-30 04:23:31
IOS中通知中心NSNotificationCenter应用总结 一、了解几个相关的类 1、 NSNotification 这个类可以理解为一个消息对象,其中有三个成员变量。 这个成员变量是这个消息对象的唯一标识,用于辨别消息对象。 @property (readonly , copy ) NSString *name; 这个成员变量定义一个对象,可以理解为针对某一个对象的消息。 @property (readonly , retain ) id object; 这个成员变量是一个字典,可以用其来进行传值。 @property (readonly , copy ) NSDictionary *userInfo; NSNotification的初始化方法: - ( instancetype)initWithName:( NSString *)name object:( id)object userInfo:( NSDictionary *)userInfo; + ( instancetype)notificationWithName:( NSString *)aName object:( id)anObject; + ( instancetype)notificationWithName:( NSString *)aName object:( id)anObject userInfo

sleep() 和 wait() 有什么区别?

半城伤御伤魂 提交于 2020-03-30 03:57:22
sleep() 和 wait() 有什么区别? sleep()和wait()都是线程暂停执行的方法。 1、这两个方法来自不同的类分别是Thread和Object,sleep方法属于Thread类中的静态方法,wait属于Object的成员方法。 2、 sleep() 是线程类(Thread)的方法,不涉及线程通信,调用时会暂停此线程指定的时间,但监控依然保持, 不会释放对象锁 ,到时间 自动恢复 ; wait() 是Object的方法,用于线程间的通信,调用时会 放弃对象锁 ,进入 等待 队列,待调用notify()/notifyAll()唤醒指定的线程或者所有线程,才进入对象锁定池准备获得对象锁进入运行状态。 3、wait,notify和notifyAll只能在 同步控制方法 或者 同步控制块 里面使用,而sleep可以在任何地方使用(使用范围)。 4、sleep()方法必须捕获异常InterruptedException,而wait()\notify()以及notifyAll()不需要捕获异常。 注意:   sleep方法只让出了CPU,而并不会释放同步资源锁。   线程执行sleep()方法后会转入阻塞状态。   sleep()方法指定的时间为线程不会运行的最短时间。因此,sleep()方法不能保证该线程睡眠到期后就开始执行。   notify的作用相当于叫醒睡着的人

NSNotificationCenter消息通信(KVO)

笑着哭i 提交于 2020-03-30 03:32:39
NSNotificationCenter 是程序不同类间的消息通信. 注册 消息 通知: 1 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(mthMsg:) name:@"mthMsg" object:nil]; addObserver:  注册通知 selector: 收到通知后调用何种方法; name: 通知的名字(唯一标示)。 发送消息通知 : [[NSNotificationCenter defaultCenter] postNotificationName:@"mthMsg" object:obj]; postNotificationName:消息的名称 //键盘注册通知1 //键盘升起 2 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; 3 //键盘降下 4 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:)

[iPhone开发]消息通信机制NSNotificationCenter

谁说我不能喝 提交于 2020-03-30 03:31:10
最近写程序需要用到这类,研究了下,现把成果和大家分享。 NSNotificationCenter 是专门供程序中不同类间的消息通信而设置的,使用起来极为方便, 长话短说。 设置通知,就是说要在什么地方(哪个类)接受通知,一般在初始化中做。 [[ NSNotificationCenter defaultCenter] addObserver :self selector :@selector(test:) name:@"test " object : nil ]; 我仅对以上参数做以说明: addObserver  这个是观察者,就是说 在什么地方接收通知 ;   selector  这个是收到通知后,调用何种方法 ;   name : 这个是通知的名字,也是通知的唯一标示,编译器就通过这个找到通知的。 发送通知,就是说此时要调用观察者处的方法。 [[NSNotificationCenter defaultCenter ] postNotificationName :@"test"  object : searchFriendArray ]; 我仅对以上参数做以说明: postNotificationName :通知的名字,也是通知的唯一标示,编译器就通过这个找到通知的。 object :传递的参数 发送通知时,默认调用 test 方法。 - ( void ) test:(

Node.js 的module 系统

元气小坏坏 提交于 2020-03-30 03:18:54
  相较于原生的JavaScript,不同的JavaScript文件之间很难共享变量。有鉴于此,Node.js在JavaScript的基础上进行了扩充,引入了require,exports,module三个global object。 一、absolute module 和 relative module   Smashing Node.js 的作者将node.js 中的modules 分成了两类,一类是absolute modules,一类是 relative modules。   <1> absolute modules,指的是是node core自带的重要modules,如http,fs等,我们使用这些modules时,只需要 require(‘module_name’)即可;还包括用npm安装的第三方module,这些module 默认安装的位置是./node_modules/ 路径下,使用这些modules时,同样只需要require(‘module_name’)即可。但是,在package.json文件中要添加这些module的name,以便使用npm安装。   <2> relative modules,指的是我们自己写的modules,这些modules一般存在于工程文件夹内部,引用时我们需要以require(‘相对路径/module_name’)的方式引用。相对路径

IOS消息机制-NSNotification与NSNotificationCenter

自作多情 提交于 2020-03-30 03:08:51
  IOS的消息机制其实是观察者模式的一个实践。你对某个事件感兴趣,那就就去注册成为他的观察者,这样当这个事件发生时就会收到人家的通知啦,就这么简单。还记得我们在《IOS之MVC》中说过,model不能直接调用controller,但是可以通过某种特殊的手段,间接的告诉controller去干什么,从而达到调用的目的。通过发送消息可以达到代码的彻底解耦。   消息机制的主要流程是:      与notification相关的类及方法使用: NSNotification   NSNotification封装了一些信息是的通过NSNotificationCenter发送消息的时候可以携带一些额外的信息。一个NSNotification对象包括一个name,object和一个额外的dictionary。name是用来标识一个消息的tag,object是消息的发送者想告诉消息接受者的一个对象(通常是消息的发送者),而dic存储了一些消息相关的信息。NSNotification是不可变的对象。   你可以通过下面的这些方法创建一个NSNotification对象:    + notificationWithName:object:   + notificationWithName:object:userInfo:    – initWithName:object:userInfo:   -

21.面向对象-----Object类的使用

烈酒焚心 提交于 2020-03-29 16:14:04
1.说明 1.Object类是所Java类的根父类; 2.如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类。如: class Person{} 等价于: class Person extends Object{} 3.由于受继承性的影响,所有的类默认继承Object类,如果没有显示的继承某个类,则默认继承Object类,Object类中的功能(属性、方法)就具有了通用性。 4.Object类只声明了一个空参构造器 2.主要结构 3.==操作符和equals() ==操作符:   > 基本类型比较值:只要两个变量的值相等,即为true。   > 引用类型比较引用(是否指向同一个对象):只有指向同一个对象时,==才返回true。     Person p1 = new Person();     Person p2 = new Person();     if(p1 == p2){} 注意: 用“==”进行比较时,符号两边的数据类型必须兼容(可自动转换的基本数据类型除外),否则编译出错 代码: public class test { public static void main(String[] args) { //对于基本数据类型 int a = 10; int b = 10; if (a == b) { System.out