class Demo implements Runnable
{
private int num=100;
public void run()
{
while(num>0)
fun();
}
public synchronized void fun()
{
if(num>0)
System.out.println(Thread.currentThread().getName()+"..."+num--);
}
}
public class main {
public static void main(String[] args) {
Demo D=new Demo();
Thread t1=new Thread(D);
Thread t2=new Thread(D);
t1.start();
t2.start();
}
}
这里值得注意的是 那么 同步函数的锁是什么 。。其实是 this 或者写 this.getClass()我们验证一下
..
class Demo implements Runnable
{
private int num=300;
public boolean f=true;
public void run()
{
while(num>0)
{
if(f)
{
fun();
}
else
{
synchronized (this)
{
if(num>0)
System.out.println(Thread.currentThread().getName()+"..."+this);
}
}
}
}
public synchronized void fun()
{
if(num>0)
System.out.println(Thread.currentThread().getName()+"..."+this);
}
}
public class main {
public static void main(String[] args) {
Demo D=new Demo();
Thread t1=new Thread(D);
Thread t2=new Thread(D);
t1.start();
D.f=false;
t2.start();
}
}
如果是静态的同步函数 那么锁是什么呢 。。。 其实是 Thread.class
。。
class Demo implements Runnable
{
private static int num=500;
public boolean f=true;
public void run()
{
while(num>0)
{
if(f)
{
fun();
}
else
{
synchronized (Thread.class)
{
if(num>0)
System.out.println(Thread.currentThread().getName()+"..."+Thread.class);
}
}
}
}
public static synchronized void fun()
{
if(num>0)
System.out.println(Thread.currentThread().getName()+"..."+Thread.class);
}
}
public class main {
public static void main(String[] args) {
Demo D=new Demo();
Thread t1=new Thread(D);
Thread t2=new Thread(D);
t1.start();
D.f=false;
t2.start();
}
}