当前位置: 首页 > news >正文

威海住房建设部官方网站天津快推科技有限公司

威海住房建设部官方网站,天津快推科技有限公司,wordpress 评论 倒序,牡丹江网络推广暂停线程意味着此线程还可以恢复运行。在Java多线程中,可以使用suspend()方法暂停线程,使用resume()方法恢复线程的执行。 suspend与resume方法的使用 示例代码如下: public class MyThread extends Thread{private long i 0;Overridepub…

  暂停线程意味着此线程还可以恢复运行。在Java多线程中,可以使用suspend()方法暂停线程,使用resume()方法恢复线程的执行。

suspend与resume方法的使用

示例代码如下:

public class MyThread extends Thread{private long i = 0;@Overridepublic void run() {while(true){i++;}}public long getI() {return i;}public void setI(long i) {this.i = i;}
}
public class Run {public static void main(String[] args) {try{MyThread t = new MyThread();t.start();Thread.sleep(5000);//A段t.suspend();System.out.println("A= " +System.currentTimeMillis()+" i="+t.getI());Thread.sleep(5000);System.out.println("A= " +System.currentTimeMillis()+" i="+t.getI());//B段t.resume();Thread.sleep(5000);//C段t.suspend();System.out.println("B= " +System.currentTimeMillis()+" i="+t.getI());Thread.sleep(5000);System.out.println("B= " +System.currentTimeMillis()+" i="+t.getI());}catch(Exception e){e.printStackTrace();}}
}

运行结果:
这里写图片描述
从控制台的打印的时间来看,线程的确被暂停了,而且还恢复成运行的状态。

suspend与resume方法的缺点-独占

  在使用suspend与resume方法时,如果使用不当,极易造成公共的同步对象独占,使其他线程无法访问公共同步对象。示例代码如下:

public class SynchronizedObject {synchronized public void printString(){System.out.println("begin");if(Thread.currentThread().getName().equals("a")){System.out.println("a线程永远 suspend!");Thread.currentThread().suspend();}System.out.println("end");}
}
public class Run {public static void main(String[] args) throws InterruptedException {SynchronizedObject s = new SynchronizedObject();Thread t1 = new Thread(){@Overridepublic void run() {s.printString();}};t1.setName("a");t1.start();Thread.sleep(1000);Thread t2 = new Thread(){@Overridepublic void run() {System.out.println("t2 启动了,但进入不printString()方法!");s.printString();}};t2.start();}
}

执行结果如下:
这里写图片描述
还有另外一种独占锁的情况,创建如下代码:

public class MyThread extends Thread{private long i = 0;@Overridepublic void run() {while(true){i++;}}
}
public class Run2 {public static void main(String[] args) throws InterruptedException {MyThread t = new MyThread();t.start();Thread.sleep(1000);t.suspend();System.out.println("main end");}
}

执行结果如下:
这里写图片描述
但是如果将代码改为如下:

public class MyThread extends Thread{private long i = 0;@Overridepublic void run() {while(true){i++;System.out.println("i="+i);}}
}

则输入结果如下:
这里写图片描述
控制台并不打印main end。出现这样情况的原因是,当程序运行到println()方法内部停止,同步锁未被释放。在上面也有讲过println()方法内部是同步的。这样就导致PrintStream对象的println()方法一直呈”暂停”状态,并且“锁未释放“,所有main线程的println迟迟不能打印。

suspend与resume方法的缺点-不同步

  在使用suspend与resume方法时也很容易出现因为线程的暂停而导致数据不同的情况。示例代码如下:

public class MyObject {private String username = "1";private String password = "11";public void setValue(String u,String p){this.username = u;if(Thread.currentThread().getName().equals("a")){System.out.println("停止a线程");Thread.currentThread().suspend();}this.password = p;}public void printUserNamePassword(){System.out.println(username+ " "+ password);}
}
public class Run {public static void main(String[] args) throws InterruptedException {MyObject m = new MyObject();Thread t1 = new Thread(){@Overridepublic void run() {m.setValue("a", "aa");}};t1.setName("a");t1.start();Thread.sleep(1000);Thread t2 = new Thread(){@Overridepublic void run() {m.printUserNamePassword();}};t2.start();}
}

运行结果如下:
这里写图片描述

http://www.yayakq.cn/news/891976/

相关文章:

  • 做海报的网站什么编辑平台建设上线网站
  • 清远企业网站建设公司wordpress 边栏修改
  • 广州做网站 汉狮网络淮北官方网站
  • 三亚做网站推广东莞招聘网官方网站
  • 网站建设展板企业宣传视频制作免费版
  • 做一个小型网站多少钱WordPress留言板插件使用
  • 什么网站动物和人做的吗wordpress语言包插件
  • 东莞营销型网站建设国内做网站费用
  • 阳江市建设局网站软件服务外包
  • asp网站建设类论文wordpress易企秀
  • 网站建设步骤实践报告网站建设开场白怎么说
  • 男女朋友在一起做那个的网站柳州做网站那家好
  • 中英文网站开发会议网站
  • 网站开发工程师是什么内容安丘网站建设多少钱
  • 制作网站培训网站设计主页
  • 手机怎么创网站免费博山网站建设
  • 注册公司网站模板下载wordpress页面找不到该网页
  • 建设 春风 摩托车官方网站网站建设的具体过程
  • 宿迁房产网官方网站海尔网站建设
  • 网站后缀pw网络运维工程师薪酬
  • php做的商城网站设计论文wordpress tag 模板
  • 做网站说什么5.0啥意思网络技术培训机构
  • 温州建设网站公司重庆建设工程施工安全管理平台
  • 360安全网站怎么做号码认证dw做的网站要多大
  • 制作制作网站开发网站建设公制度
  • 企业网站开发服务器科技设计网站有哪些内容
  • 地方性资讯门户网站一般公司常用的邮箱
  • 同城同镇网站建设网站免费建站
  • 成都商城网站建设牧风的在wordpress
  • 山东手机网站建设电话网站作品欣赏