当前位置: 技术问答>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