Java线程同步与死锁认识

讲下自己的认识,算小小的总结吧!

synchroized 具有同步线程的功能,它的处理机制类似于给参数里面的对象赋一个标记值,来表明当前状态,当程序里面某个线程执行synchroized里面的代码段时,它会先对这个状态进行判断,如果处于0这种状态,它会暂时被阻塞,所以能有效防止数据错误的产生。


死锁这个概念,个人理解是两个线程或多个线程产生冲突,例如两个线程,两个代码块,当线程一在处理代码块一的时候,这个时候要用到代码块二的东西,而线程二在处理代码块二的东西,也希望调用代码块一的东西,这个时候由于各自线程都锁住当前代码块,导致一直处于阻塞状态,然后就崩溃了。


一个简单的例子:

package t1;

public class t5 {

	public static void main(String[] args) {
		t t1 = new t();

		Thread tt = new Thread(t1);
		Thread tt1 = new Thread(t1);

		tt.start();
		tt1.start();

	}

}

class t implements Runnable {
	private int num = 2000;

	public void run() {
		
		
			
		
		while (true) {
			synchronized (this) {
			if (num > 0) {
//				try {
//					Thread.sleep(1000);
//				} catch (InterruptedException e) {
//					// TODO Auto-generated catch block
//					e.printStackTrace();
//				}
				System.out
						.println(Thread.currentThread().getName() + " " + num);

				num--;
			} else
				break;
		}
		}
	}
}


posted @ 2015-05-21 13:21  __夜风  阅读(157)  评论(0编辑  收藏  举报