java关键字synchronized的问题 好像是将当前内存块中相关内容lock住,不让其他线程访问,直接该线程访问完毕,再unlock 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 晕,是楼上的楼上的楼上whyxx(我也是新手) 是这样子的,线程在java当中一旦有关于临界区 问题的时候需要互斥的访问,这个时候java为每一个临界区放置一个lock,这个lock一旦发现有线程进入,则将lock分配给这个线程,其他的线程在当前线程退出临界区之前是不能够获得lock并进入临界区的。所以一旦你添加了sychronized后,所有的互斥要求都得到满足,不必再要求程序员编码完成了。 java里没有专门用于做互斥的工具类,而是采用一个关键字(synchronized)来实现互斥的功能。这与c/c++不太一样,c/c++中有专门的互斥函数或工具类,但是不同平台是不一样的,在Windows下是采用结构体CRITICAL_SECTION,及其相关的几个函数: 1.InitializeCriticalSection, 2.DeleteCriticalSection, 3.InitializeCriticalSection, 4.LeaveCriticalSection来实现。对于MFC这采用CMutex。在Linux采用结构体pthread_mutex_t,及其相关函数: 1.pthread_mutex_init 2.pthread_mutex_destroy 3.pthread_mutex_lock 4.pthread_mutex_unlock来实现。由此看来,c/c++中做互斥需要用到一个结构(或类)。但是java中却没有这样的类,表面上看是这样,其实不然,java里有这种类,就是java里所有类的父类:Object。在做互斥的时候synchronized后面需要加一个对象,这个对象可以看作是windows下的结构体CRITICAL_SECTION或Linux下的结构体pthread_mutex_t。可以这样来理解,在Object里加两个方法:lock和unlock,其功能分别为加锁和解锁。下面的代码: synchronized(obj){ ... }可以转换成: obj.lock(); ... obj.unlock();这样的话synchronized关键字就可以不要了。但是java里为了简化编程还是采用了synchronized关键字,而省略了Object的lock和unlock方法。 tcp socket数据粘包,怎么解决啊? 已知汉字如何求内码?已知内码如何求汉字?(求代码) 如何查找两个字符串中是否有相同的部分 像素问题? 如何使用 Java2D 便捷的绘制弯曲的封闭图形 使用java.text.DecimalFormat类,如何将类似 1,234,567.1 数字转化成 1234567.1呢? 十万火急:如何让任务栏图标闪烁 高分求宝,100不够再加! java中如何绘图? jbuilder7下的java发布问题? MySQL server can not start up...... 苦恼,因水平低,不知如何将这个c写的函数改成java的.....
java里没有专门用于做互斥的工具类,而是采用一个关键字(synchronized)来实现互斥的功能。这与c/c++不太一样,c/c++中有专门的互斥函数或工具类,但是不同平台是不一样的,
在Windows下是采用结构体CRITICAL_SECTION,及其相关的几个函数:
1.InitializeCriticalSection,
2.DeleteCriticalSection,
3.InitializeCriticalSection,
4.LeaveCriticalSection
来实现。对于MFC这采用CMutex。
在Linux采用结构体pthread_mutex_t,及其相关函数:
1.pthread_mutex_init
2.pthread_mutex_destroy
3.pthread_mutex_lock
4.pthread_mutex_unlock
来实现。由此看来,c/c++中做互斥需要用到一个结构(或类)。
但是java中却没有这样的类,表面上看是这样,其实不然,java里有这种类,就是java里所有类的父类:Object。
在做互斥的时候synchronized后面需要加一个对象,这个对象可以看作是windows下的结构体CRITICAL_SECTION或Linux下的结构体pthread_mutex_t。可以这样来理解,在Object里加两个方法:lock和unlock,其功能分别为加锁和解锁。下面的代码:
synchronized(obj){
...
}
可以转换成:
obj.lock();
...
obj.unlock();
这样的话synchronized关键字就可以不要了。但是java里为了简化编程还是采用了synchronized关键字,而省略了Object的lock和unlock方法。