多线程安全问题的解决方法一

用同步代码块来解决线程的同步问题

1. 同步代码块的格式

synchronized(Object obj) {

需要被同步的代码

}

2. 同步代码块的好处

可以解决线程的安全问题

3. 同步代码块的弊端

相对降低了效率,因为同步外线程都要判断同步锁

4. 同步的前提

必须有多线程,同时多个线程使用的是同一把锁

5. 代码示例

class TicketRunnable implements Runnable
{
	private int num = 400;
	public void run()
	{
		while(true)
		{
			//加入同步代码块,解决线程安全问题	
			synchronized(this)
			{
				//这里存在线程安全问题
				if(num > 0)
				{
					//分析导致线程不安全的原因后加入sleep加快问题的暴露
					try
					{
						Thread.sleep(10);
					}
					catch (InterruptedException e)
					{
					}
					//
					System.out.println(Thread.currentThread().getName()+ "...sale..." + num--);	
				}
				//<------->
			}
		}		
	}
}

class ThreadSafety 
{
	public static void main(String[] args) 
	{
		//创建任务
		TicketRunnable tr = new TicketRunnable();
		//创建线程
		Thread t1 = new Thread(tr);
		Thread t2 = new Thread(tr);
		Thread t3 = new Thread(tr);
		Thread t4 = new Thread(tr);
		t1.start();
		t2.start();
		t3.start();
		t4.start();
	}
}


你可能感兴趣的:(java)