本文目录一览:
Java怎么使用synchronized声明一个变量?
首先要说明的是,Java里不能直接使用 synchronized
声明一个变量,而是使用 synchronized
去修饰一个代码块或一个方法。
详细说明如下:
synchronized
用来修饰一个方法或者一个代码块,它用来保证在同一时刻最多只有一个线程执行该段代码。
一、当两个并发线程访问同一个对象 object
中的这个 synchronized(this)
同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。
二、然而,当一个线程访问 object
的一个 synchronized(this)
同步代码块时,另一个线程仍然可以访问该 object
中的非 synchronized(this)
同步代码块。
三、尤其关键的是,当一个线程访问 object
的一个 synchronized(this)
同步代码块时,其他线程对 object
中所有其它 synchronized(this)
同步代码块的访问将被阻塞。
四、第三个例子同样适用其它同步代码块。也就是说,当一个线程访问 object
的一个 synchronized(this)
同步代码块时,它就获得了这个 object
的对象锁。结果,其它线程对该 object
对象所有同步代码部分的访问都被暂时阻塞。
五、以上规则对其它对象锁同样适用。
示例代码:
public class Thread1 implements Runnable {
public void run() {
synchronized(this) {
for (int i = 0; i < 10; i++) {
// do something
}
}
}
}
回答于 2022-11-16
Java中定义与声明的区别是什么?
Java中,我们应该知道最基本的就是定义变量和声明变量了,定义与声明这两者是有区别的,小编在此整理了Java中定义与声明的区别,供大家参阅,希望大家在阅读过程中有所收获!
定义和声明的定义区别
- 一种是需要建立存储空间的。例如:
int a
在声明的时候就已经建立了存储空间。 - 另一种是不需要建立存储空间的。例如:
extern int a
,其中变量a
是在别的文件中定义的。 声明是向编译器介绍名字——标识符。它告诉编译器“这个函数或变量在某处可找到,它的模样象什么”。 而定义是说:“在这里建立变量”或“在这里建立函数”。它为名字分配存储空间。无论定义的是函数还是变量,编译器都要为它们在定义点分配存储空间。 对于变量,编译器确定变量的大小,然后在内存中开辟空间来保存其数据,对于函数,编译器会生成代码,这些代码最终也要占用一定的内存。 总之就是:把建立空间的声明称为“定义”,把不需要建立存储空间的称为“声明”。 基本类型变量的声明和定义(初始化)是同时产生的;而对于对象来说,声明和定义是分开的。 下面小编给大家举个例子说明一下。 例如:类 A 如果A a;
就是一个声明,告诉编译器a
是 A 类的一个对象变量,但是不进行初始化; 如果以后a = new A();
这就是初始化,分配了空间。 需要注意的是我们声明的最终目的是为了提前使用,即在定义之前使用,如果不需要提前使用就没有单独声明的必要,变量是如此,函数也是如此,所以声明不会分配存储空间,只有定义时才会分配存储空间。 用static
来声明一个变量的作用有二: - 对于局部变量用
static
声明,则是为该变量分配的空间在整个程序的执行期内都始终存在。 - 外部变量用
static
来声明,则该变量的作用只限于本文件模块。
定义和声明的具体区别
所谓定义就是(编译器)创建一个对象,为这个对象分配一块内存,并给它取上一个名字,这个名字就是我们经常所说的变量名或对象名。 声明有两重含义:
- 告诉编译器,这个名字已经匹配到一块内存上,下面的代码用到变量或者对象是在别的地方定义的。声明可以出现多次。
- 告诉编译器,这个名字已经被预定了,别的地方再也不能用它来作为变量名或对象名。
定义和声明最重要区别
定义创建对象并为这个对象分配了内存,声明没有分配内存。
java声明变量
类型 变量名[=初值] [,变量名[=初值]......]
例如:String s = "", b = "";
,中间的逗号表示连续声明变量,都是最前面的类型。