线程安全问题————(静态)同步函数
2018-03-06 14:12
253 查看
同步函数的使用的锁是this;同步函数和同步代码块的区别:
同步函数的锁是固定的this。同步代码块的锁是任意的对象。建议使用同步代码块。
静态的同步函数使用的锁是 该函数所属字节码文件对象
可以用 getClass方法获取,也可以用当前 类名.class 表示。
*/
class Ticket implements Runnable
{
private int num = 100;
// Object obj = new Object();
boolean flag = true;
public void run()
{
// System.out.println("this:"+this);
if(flag)
while(true)
{
synchronized(this)
{
if(num>0)
{
try{Thread.sleep(10);}catch (InterruptedException e){}
System.out.println(Thread.currentThread().getName()+".....obj...."+num--);
}
}
}
else
while(true)
this.show();
}
public synchronized void show()
{
if(num>0)
{
try{Thread.sleep(10);}catch (InterruptedException e){}
System.out.println(Thread.currentThread().getName()+".....function...."+num--);
}
}
}
class SynFunctionLockDemo
{
public static void main(String[] args)
{
Ticket t = new Ticket();
// System.out.println("t:"+t);
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
t1.start();
try{Thread.sleep(10);}catch(InterruptedException e){}
t.flag = false;
t2.start();
}
}
同步函数的锁是固定的this。同步代码块的锁是任意的对象。建议使用同步代码块。
静态的同步函数使用的锁是 该函数所属字节码文件对象
可以用 getClass方法获取,也可以用当前 类名.class 表示。
*/
class Ticket implements Runnable
{
private int num = 100;
// Object obj = new Object();
boolean flag = true;
public void run()
{
// System.out.println("this:"+this);
if(flag)
while(true)
{
synchronized(this)
{
if(num>0)
{
try{Thread.sleep(10);}catch (InterruptedException e){}
System.out.println(Thread.currentThread().getName()+".....obj...."+num--);
}
}
}
else
while(true)
this.show();
}
public synchronized void show()
{
if(num>0)
{
try{Thread.sleep(10);}catch (InterruptedException e){}
System.out.println(Thread.currentThread().getName()+".....function...."+num--);
}
}
}
class SynFunctionLockDemo
{
public static void main(String[] args)
{
Ticket t = new Ticket();
// System.out.println("t:"+t);
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
t1.start();
try{Thread.sleep(10);}catch(InterruptedException e){}
t.flag = false;
t2.start();
}
}
相关文章推荐
- java线程安全问题之静态变量、实例变量、局部变量
- 静态变量、实例变量、局部变量在多线程环境下的线程安全问题 java 多线程
- java线程安全问题之静态变量、实例变量、局部变量
- java线程安全问题之静态变量、实例变量、局部变量
- java线程安全问题之静态变量、实例变量(类变量)、局部变量
- java线程安全问题之静态变量、实例变量、局部变量
- java线程安全问题之静态变量、实例变量、局部变量
- java线程安全问题之静态成员变量、实例成员变量、局部变量
- java线程安全问题之静态变量、实例变量、局部变量
- java线程安全问题之静态变量、实例变量、局部变量
- java线程安全问题之静态成员变量、实例成员变量、局部变量
- java线程安全问题之静态变量、实例变量、局部变量
- java线程安全问题之静态变量、实例变量、局部变量
- java静态方法之线程安全问题
- java线程安全问题之静态变量、实例变量、局部变量
- 如果静态方法里面没有存取静态字段的话, 就没有并发的线程安全的问题...(这句话对吗?)
- java静态方法之线程安全问题
- java线程安全问题之静态变量、实例变量、局部变量
- java线程安全问题之静态变量、实例变量、局部变量
- Java笔记3 多线程<1>线程概述、多线程的创建、多线程的安全问题、静态同步函数的锁、死锁