android线程的状态,android线程状态

一、线程同步:

当两个或两个以上的线程同时访问一个资源。为了保护资源数据的安全,要求在同一时间只能一个线程访问该资源。

同步造成的结果:1、数据安全 2、效率低下。

二、线程死锁:

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

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

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

三、线程状态:

0818b9ca8b590ca3270a3433284dd417.png

四、

0818b9ca8b590ca3270a3433284dd417.png

五、

0818b9ca8b590ca3270a3433284dd417.png

示例:

packagejava_520_1314;

publicclassTestSynchronized {

publicstaticvoidmain(String[] args) {

MyObj obj = newMyObj();

OneThread one = newOneThread(obj);

TwoThread two = newTwoThread(obj);

}

}

classMyObj {

publicbooleanisRun =true;

}

classOneThreadextendsThread {

privateMyObj obj;

publicOneThread(MyObj obj) {

this.obj = obj;

this.start();

}

publicvoidrun() {

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();

}

}

}

}

}

}

classTwoThreadextendsThread {

privateMyObj obj;

publicTwoThread(MyObj obj) {

this.obj = obj;

this.start();

}

publicvoidrun() {

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();

}

}

}

}

}

}

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值