对于线程安全问题,是由于线程对内存、数据的共享引发,采用synchronized关键字标记针对共享资源的操作;同步方法、同步块。同步代码块:
格式:
synchronized (object) {代码块}
public class SynBlockThread {
public static void main(String [] args)
{
SynSellThread t=new SynSellThread();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
}//end main
}
class SynSellThread implements Runnable
{
private int tickets=100;
String str= "";
public void run()
{
while(true)
{
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized(str)
{
if(tickets>0)
{
String result=Thread.currentThread().getName()+" is selling ticket "+tickets;
System.out.println(result);
tickets--;
}
}//end synchronized
}//end while
}//end run
}//end class
同步方法:
格式:
[访问修饰符] synchronized 返回类型 方法名(参数表) {方法体}
public class SynMethodThread {
public static void main(String [] args)
{
SynMethodSellThread t=new SynMethodSellThread();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
}//end main
}
class SynMethodSellThread implements Runnable
{
private int tickets=100;
public void run()
{
while(true)
{
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
sale();
}
}//end run
public synchronized void sale()
{
if(tickets>0)
{
String result=Thread.currentThread().getName()+" is selling ticket "+tickets;
System.out.println(result);
tickets--;
}
}//end sale
}//end class



