android线程状态

关于线程的一点补充

分类: JAVA 315人阅读 评论(0) 收藏 举报

一、线程同步:

当两个或两个以上的线程同时访问一个资源。为了保护资源数据的安全,要求在同一时间只能一个线程访问该资源。
同步造成的结果:1、数据安全 2、效率低下。

二、线程死锁:

当两个线程循环依赖于一对同步对象时将发生死锁。例如:

一个线程进入对象ObjA上的监视器,而另一个线程进入对象ObjB上的监视器。如果ObjA中的线程试图调用ObjB上的任何synchronized方法,就将发生死锁。

死锁很少发生,但一旦发生就很难调试。

三、线程状态:

四、

五、

示例:

  1. <span style="font-size:18px;">package java_520_1314;  
  2.   
  3. public class TestSynchronized {  
  4.     public static void main(String[] args) {  
  5.         MyObj obj = new MyObj();  
  6.         OneThread one = new OneThread(obj);  
  7.         TwoThread two = new TwoThread(obj);  
  8.   
  9.     }  
  10. }  
  11.   
  12. class MyObj {  
  13.     public boolean isRun = true;  
  14. }  
  15.   
  16. class OneThread extends Thread {  
  17.     private MyObj obj;  
  18.   
  19.     public OneThread(MyObj obj) {  
  20.         this.obj = obj;  
  21.         this.start();  
  22.     }  
  23.     public void run() {  
  24.         while (true) {  
  25.             // 同步块,当前线程对obj进行同步  
  26.             synchronized (obj) {  
  27.                 if (obj.isRun == true) {  
  28.                     System.out.print("AA");  
  29.                     obj.isRun = false;  
  30.                     // 唤醒下一个线程访问obj资源  
  31.                     obj.notify();  
  32.                     try {  
  33.                         Thread.sleep(100);  
  34.                     } catch (InterruptedException e) {  
  35.                         e.printStackTrace();  
  36.                     }  
  37.                 } else {  
  38.                     try {  
  39.                         // 当前线程相对obj对象进行等待  
  40.                         obj.wait();  
  41.                     } catch (InterruptedException e) {  
  42.                         e.printStackTrace();  
  43.                     }  
  44.                 }  
  45.             }  
  46.         }  
  47.     }  
  48. }  
  49.   
  50. class TwoThread extends Thread {  
  51.     private MyObj obj;  
  52.   
  53.     public TwoThread(MyObj obj) {  
  54.         this.obj = obj;  
  55.         this.start();  
  56.     }  
  57.     public void run() {  
  58.         while (true) {  
  59.             synchronized (obj) {  
  60.                 if (obj.isRun == false) {  
  61.                     System.out.print("B");  
  62.                     obj.isRun = true;  
  63.                     // 唤醒下一个线程访问obj资源  
  64.                     obj.notify();  
  65.                     try {  
  66.                         Thread.sleep(100);  
  67.                     } catch (InterruptedException e) {  
  68.                         e.printStackTrace();  
  69.                     }  
  70.                 } else {  
  71.                     try {// 当前线程相对obj对象进行等待  
  72.                         obj.wait();  
  73.                     } catch (InterruptedException e) {  
  74.                         e.printStackTrace();  
  75.                     }  
  76.                 }  
  77.             }  
  78.         }  
  79.     }  
  80. }</span>  
package java_520_1314;

public class TestSynchronized {
	public static void main(String[] args) {
		MyObj obj = new MyObj();
		OneThread one = new OneThread(obj);
		TwoThread two = new TwoThread(obj);

	}
}

class MyObj {
	public boolean isRun = true;
}

class OneThread extends Thread {
	private MyObj obj;

	public OneThread(MyObj obj) {
		this.obj = obj;
		this.start();
	}
	public void run() {
		while (true) {
			// 同步块,当前线程对obj进行同步
			synchronized (obj) {
				if (obj.isRun == true) {
					System.out.print("AA");
					obj.isRun = false;
					// 唤醒下一个线程访问obj资源
					obj.notify();
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				} else {
					try {
						// 当前线程相对obj对象进行等待
						obj.wait();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}
	}
}

class TwoThread extends Thread {
	private MyObj obj;

	public TwoThread(MyObj obj) {
		this.obj = obj;
		this.start();
	}
	public void run() {
		while (true) {
			synchronized (obj) {
				if (obj.isRun == false) {
					System.out.print("B");
					obj.isRun = true;
					// 唤醒下一个线程访问obj资源
					obj.notify();
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				} else {
					try {// 当前线程相对obj对象进行等待
						obj.wait();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}
	}
}


 

更多 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值