说明:本章内容是博主的Java学习笔记,
1.同步实例方法
/**
* synchronized同步实例方法
* 把整个方法体作为同步代码块
* 默认的锁对象是this对象
*
*/
public class Test05 {
public static void main(String[] args) {
Test05 test01 =new Test05();
new Thread(new Runnable() {
@Override
public void run() {
test01.handle();
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
test01.handle22();
}
}).start();
}
public void handle()
{
synchronized (this){ //经常使用this当前对象作为锁对象
for(int i=1;i<=100;i++){
System.out.println(Thread.currentThread().getName()+"-->"+i);
}
}
}
//使用synchronized修饰实例方法,同步实例方法,默认this作为锁对象
public synchronized void handle22()
{
//经常使用this当前对象作为锁对象
for(int i=1;i<=100;i++){
System.out.println(Thread.currentThread().getName()+"-->"+i);
}
}
}
2.同步静态方法
/**
* synchronized同步静态方法
* 把整个方法体作为同步代码块
* 默认的锁对象是当前类的运行时类对象 Test06.class ,有人称它为类锁
*
*/
public class Test06 {
public static void main(String[] args) {
Test06 test01 =new Test06();
new Thread(new Runnable() {
@Override
public void run() {
test01.handle();
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
handle22();
}
}).start();
}
public void handle()
{
//使用当前类的运行时类对象作为锁对象,可以简单的理解为把Test06类的字节码文件作为锁对象
synchronized (Test06.class){ //经常使用this当前对象作为锁对象
for(int i=1;i<=100;i++){
System.out.println(Thread.currentThread().getName()+"-->"+i);
}
}
}
//使用synchronized修饰静态方法,同步静态方法,默认的锁对象是当前类的运行时类对象
public static synchronized void handle22()
{
//经常使用this当前对象作为锁对象
for(int i=1;i<=100;i++){
System.out.println(Thread.currentThread().getName()+"-->"+i);
}
}
}