当前位置: 技术问答>java相关
关于thread类应用的问题
来源: 互联网 发布时间:2015-05-11
本文导语: 帮我看看下面的程序,运行不正常,如果把每个同步方法去除同步属性,即去掉synchronized关键字,运行就正常了。能否解释一下synchronized属性的用法; 还有就是如果把doWork()中的System.out.println(count--);换为下面注...
帮我看看下面的程序,运行不正常,如果把每个同步方法去除同步属性,即去掉synchronized关键字,运行就正常了。能否解释一下synchronized属性的用法;
还有就是如果把doWork()中的System.out.println(count--);换为下面注释中的语句,运行中程序提示出错,是为什么?
//ThreadExample.java 线程类应用的综合实例
class Worker extends Thread
{
public boolean stopped=false;
public boolean suspended=false;
public int count;
//同步方法,控制线程的终止
synchronized void safeStop()
{
System.out.println("stopped");
stopped=true;
}
//同步方法,控制线程的挂起
synchronized void safeSuspend()
{
System.out.println("Suspended");
suspended=true;
}
//同步方法,控制线程从挂起状态的恢复
synchronized void safeResume()
{
System.out.println("Resumed");
suspended=false;
}
//同步方法,判断标志变量
synchronized boolean ok()
{
return(!stopped);
}
//同步方法,线程实际执行的内容
synchronized void doWork()
{
if(!suspended)
{
System.out.println(count++);
}
else
{
while(suspended)
{
System.out.println(count--);
//try
//{
// wait();
//}
//catch(InterruptedException e)
//{
//}
}
}
}
//重载线程的run方法
public void run()
{
while(ok())
{
doWork();
}
}
}
public class ThreadExample
{
public static void main(String args[])
{
//创建线程实例
Worker worker=new Worker();
//设置线程的优先级
worker.setPriority(Thread.currentThread().getPriority()-1);
try
{
//启动线程
worker.start();
//利用循环,重复演示线程的启动、运行、挂起、死亡等状态
for(int i=0;i
还有就是如果把doWork()中的System.out.println(count--);换为下面注释中的语句,运行中程序提示出错,是为什么?
//ThreadExample.java 线程类应用的综合实例
class Worker extends Thread
{
public boolean stopped=false;
public boolean suspended=false;
public int count;
//同步方法,控制线程的终止
synchronized void safeStop()
{
System.out.println("stopped");
stopped=true;
}
//同步方法,控制线程的挂起
synchronized void safeSuspend()
{
System.out.println("Suspended");
suspended=true;
}
//同步方法,控制线程从挂起状态的恢复
synchronized void safeResume()
{
System.out.println("Resumed");
suspended=false;
}
//同步方法,判断标志变量
synchronized boolean ok()
{
return(!stopped);
}
//同步方法,线程实际执行的内容
synchronized void doWork()
{
if(!suspended)
{
System.out.println(count++);
}
else
{
while(suspended)
{
System.out.println(count--);
//try
//{
// wait();
//}
//catch(InterruptedException e)
//{
//}
}
}
}
//重载线程的run方法
public void run()
{
while(ok())
{
doWork();
}
}
}
public class ThreadExample
{
public static void main(String args[])
{
//创建线程实例
Worker worker=new Worker();
//设置线程的优先级
worker.setPriority(Thread.currentThread().getPriority()-1);
try
{
//启动线程
worker.start();
//利用循环,重复演示线程的启动、运行、挂起、死亡等状态
for(int i=0;i
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
站内导航:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!