请教高手关于Java 多线程同步的问题

SwingCN 2006-09-15 08:28:55
import java.io.*;
import java.util.*;

class T1
{ private int i;
private String name;
public T1()
{ }
public int getInt()
{ return i;
} public void setInt(int i)
{ this.i=i;
this.i++;
} public String getName()
{ return name;
} public void setName(String name)
{ this.name=name;
} }
class TestClientThread extends Thread {

// private BufferedReader in;
// private PrintWriter out;

private static int threadcount = 0;

private String name=null;
private T1 t1;
private int j=0;
public static int threadCount() {
return threadcount;
}

public TestClientThread(String name,T1 t1) {
super(name);

this.name=name;
this.t1=t1;
this.t1.setName(name);

try {
start();

} catch(Exception e) {

}
}

public void run() {
synchronized(this)
{threadcount++;
System.out.println("Name =["+name+"] Create Threadcount=["+threadcount+"]");
} try {
Thread.sleep(400);

//skip help
for(int i = 0; i < 3; i++) {
t1.setInt(i);
System.out.println("Thread Name =["+name+"] i=["+t1.getInt()+"] Obj Name=["+t1.getName()+"]");
}

j++;
Thread.sleep(100);
System.out.println("Thread Name =["+name+"] Current J=["+j+"]");
} catch(Exception e) {
//System.err.println("["+id+"] Exception : "+e);
} finally {

synchronized(this)
{ threadcount--; // Ending this thread
System.out.println("Current Threadcount=["+threadcount+"]");
}

}
} }

public class Test {
public static int MAX_THREADS = 100;
private static Random random = new Random();

public static void main(String[] args)
throws IOException, InterruptedException {
int i=0;
do {
i++;
if(TestClientThread.threadCount() < MAX_THREADS)
{ T1 t1=new T1();
new TestClientThread(String.valueOf(i),t1);
} else
break;
Thread.currentThread().sleep(random.nextInt(100));
} while(i<=100);
System.out.println("All "+MAX_THREADS+" clients are rexit!");
}

private static int getSleepTime() {
return 200;
} }

疑惑的问题如下:
1:在TestClientThread定义的私有对象t1,j是否需要同步?
2:对对象t1操作是否是线程安全的?例如调用t1的SET,GET方法
3:threadcount这个STATIC 变量是应该同步的吗?
4:那么在哪里产生的对象或者变量需要同步呢?
5:在设计多线程程序的时候,应该怎么考虑运行效率的问题呢?

请指点,在这个测试程序里面是否有不安全的线程代码,因本人是刚开始学习,有点迷惑。
THANKS。
...全文
296 5 打赏 收藏 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gongzhy 2006-09-18
  • 打赏
  • 举报
回复
顶一下
gseah 2006-09-18
  • 打赏
  • 举报
回复
w
千里冰封820 2006-09-15
  • 打赏
  • 举报
回复
要不要同步要看你的程序的需求
向有些变量 是不需要同步的
还有一些原子操作也是不需要同步的
fishyqd 2006-09-15
  • 打赏
  • 举报
回复
j不需要线程同步
i的set和get方法需要同步
healer_kx 2006-09-15
  • 打赏
  • 举报
回复
是不是需要同步的,要看你的逻辑。
是不是会出现线程安全,就看你的线程访问(写)相同的变量了。
内容概要:本文介绍了COSO企业风险管理框架,阐述了企业风险管理的定义、目标、构成要素及其与内部控制的关系。文章指出,企业风险管理是一个由董事会、管理层及其他人员实施的,应用于战略制定并贯穿于企业之中的过程,旨在识别可能影响主体的潜在事项,管理风险以使其在该主体的风险容量之内,并为主体目标的实现提供合理保证。该框架强调了企业风险管理的八大构成要素:内部环境、目标设定、事项识别、风险评估、风险应对、控制活动、信息与沟通、监控。此外,文章还讨论了企业风险管理的局限性,如人为判断失误、成本与效益的权衡、管理层凌驾等。 适合人群:具备一定管理学基础知识,对风险管理有兴趣的学者、企业管理人员、内部审计师及外部审计师。 使用场景及目标:①帮助组织理解并应用企业风险管理框架,以提高组织的风险管理水平;②指导企业如何通过有效的风险管理来实现其战略、经营、报告和合规目标;③为企业提供一套标准化的风险管理语言,促进内外部沟通与合作。 阅读建议:读者应结合实际案例,深入理解每个构成要素的具体应用,同时关注企业风险管理的局限性,以全面把握企业风险管理的本质。此外,建议定期回顾和更新风险管理策略,以适应不断变化的内外部环境。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧