同步块可用于对方法的任何特定资源执行同步。
假设你的方法中有50行代码, 但是你只想同步5行, 则可以使用synced块。
【Java中的线程同步块】如果将方法的所有代码放入同步块中, 它将与同步方法相同。
同步块要记住的要点
- 同步块用于锁定任何共享资源的对象。
- 同步块的范围小于该方法。
synchronized (object reference expression) {
//code block
}
同步块示例
让我们看一下同步块的简单示例。
同步块程序
class Table{ void printTable(int n){
synchronized(this){//synchronized block
for(int i=1;
i<
=5;
i++){
System.out.println(n*i);
try{
Thread.sleep(400);
}catch(Exception e){System.out.println(e);
}
}
}
}//end of the method
}class MyThread1 extends Thread{
Table t;
MyThread1(Table t){
this.t=t;
}
public void run(){
t.printTable(5);
}}
class MyThread2 extends Thread{
Table t;
MyThread2(Table t){
this.t=t;
}
public void run(){
t.printTable(100);
}
}public class TestSynchronizedBlock1{
public static void main(String args[]){
Table obj = new Table();
//only one object
MyThread1 t1=new MyThread1(obj);
MyThread2 t2=new MyThread2(obj);
t1.start();
t2.start();
}
}
立即测试
Output:5
10
15
20
25
100
200
300
400
500
使用匿名类的同步块的相同示例:
//使用匿名类编写同步块程序
class Table{void printTable(int n){
synchronized(this){//synchronized block
for(int i=1;
i<
=5;
i++){
System.out.println(n*i);
try{
Thread.sleep(400);
}catch(Exception e){System.out.println(e);
}
}
}
}//end of the method
}public class TestSynchronizedBlock2{
public static void main(String args[]){
final Table obj = new Table();
//only one objectThread t1=new Thread(){
public void run(){
obj.printTable(5);
}
};
Thread t2=new Thread(){
public void run(){
obj.printTable(100);
}
};
t1.start();
t2.start();
}
}
立即测试
Output:5
10
15
20
25
100
200
300
400
500
推荐阅读
- Java中的线程调度程序
- Java中的线程同步
- Java线程静态同步示例
- Java线程和关闭钩子
- 小程序安卓渲染问题
- Android 自定义控件——图片剪裁
- Android图片剪裁库
- Android 拍照图片选取与图片剪裁
- Android 之 APK 反编译