Java 学习笔记之 Suspend和Resume
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java 学习笔记之 Suspend和Resume,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3731字,纯文字阅读大概需要6分钟。
内容图文
![Java 学习笔记之 Suspend和Resume](/upload/InfoBanner/zyjiaocheng/1156/c362067d9f88435787d7ec3b4ab904ec.jpg)
Suspend和Resume:
Suspend和Resume使用方法:
以下例子证明了线程确实被暂停了,而且还可以恢复成运行状态。
public class SuspendResumeThread extends Thread{ privatelong i = 0; publiclong getI() { return i; } publicvoid setI(long i) { this.i = i; } @Override publicvoid run() { while(true){ i++; } } } publicclass ThreadRunMain { publicstaticvoid main(String[] args) { testSuspendResumeThread(); } publicstaticvoid testSuspendResumeThread(){ try { SuspendResumeThread srt = new SuspendResumeThread(); srt.start(); Thread.sleep(5000); srt.suspend(); System.out.println("A= " + System.currentTimeMillis() + " i=" + srt.getI()); Thread.sleep(5000); System.out.println("A= " + System.currentTimeMillis() + " i=" + srt.getI()); srt.resume(); Thread.sleep(5000); srt.suspend(); System.out.println("A= " + System.currentTimeMillis() + " i=" + srt.getI()); Thread.sleep(5000); System.out.println("A= " + System.currentTimeMillis() + " i=" + srt.getI()); } catch (InterruptedException e) { e.printStackTrace(); } } }
运行结果:
Suspend和Resume缺点1-独占:
public class SuspendResumeObject { synchronized public void printString(){ System.out.println("begin"); if(Thread.currentThread().getName().equals("a")){ System.out.println("a thread will suspend."); Thread.currentThread().suspend(); } System.out.println("SuspendResumeObject end"); } } publicclass ThreadRunMain { publicstaticvoid main(String[] args) { testSuspendResumeObject(); } publicstaticvoid testSuspendResumeObject(){ try { final SuspendResumeObject object = new SuspendResumeObject(); Thread t = new Thread(){ @Override publicvoid run() { object.printString(); } }; t.setName("a"); t.start(); Thread.sleep(1000); Thread t2 = new Thread(){ @Override publicvoid run() { System.out.println("Thread 2 start, but can‘t enter printString()"); System.out.println("Because of printString() is blocked by thread a"); object.printString(); System.out.println("Thread 2 complete"); } }; t2.start(); } catch (InterruptedException e) { e.printStackTrace(); } } }
运行结果:
public class SuspendResumePrintStreamIssue extends Thread{ privatelong i = 0; @Override publicvoid run() { while (true){ // try { i++; // Thread.sleep(1); System.out.println(i); // } catch (InterruptedException e) { // e.printStackTrace(); // } } } } publicclass ThreadRunMain { publicstaticvoid main(String[] args) { testSuspendResumePrintStreamIssue(); } publicstaticvoid testSuspendResumePrintStreamIssue(){ try { SuspendResumePrintStreamIssue srpsi = new SuspendResumePrintStreamIssue(); srpsi.start(); Thread.sleep(1000); srpsi.suspend(); System.out.println("Main end."); } catch (InterruptedException e) { e.printStackTrace(); } } }
运行结果:
同样是独占,当程序运行到PrintStream对象println()方法内部停止时,同步锁未被释放。这导致main()方法中的System.out.println("Main end.");不能被执行。
Suspend和Resume缺点2-数据不一致:
public class SuspendResumeDataIssue { private String userName = "1"; private String password = "11"; synchronizedpublicvoid setValue(String u, String p){ this.userName = u; if(Thread.currentThread().getName().equals("a")){ System.out.println("Thread a suspend."); Thread.currentThread().suspend(); } this.password = p; } publicvoid printUserNamePassword(){ System.out.println(userName + " " + password); } } publicclass ThreadRunMain { publicstaticvoid main(String[] args) { testSuspendResumeDataIssue(); } publicstaticvoid testSuspendResumeDataIssue(){ try { SuspendResumeDataIssue srdi = new SuspendResumeDataIssue(); Thread t1 = new Thread(){ @Override publicvoid run() { srdi.setValue("a", "aa"); } }; t1.setName("a"); t1.start(); Thread.sleep(500); Thread t2 = new Thread(){ @Override publicvoid run() { srdi.printUserNamePassword(); } }; t2.start(); } catch (InterruptedException e) { e.printStackTrace(); } } }
运行结果:
原文:http://www.cnblogs.com/AK47Sonic/p/7672606.html
内容总结
以上是互联网集市为您收集整理的Java 学习笔记之 Suspend和Resume全部内容,希望文章能够帮你解决Java 学习笔记之 Suspend和Resume所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。