Redian新闻
>
很简单的代码,问题求助。太迷惑了
avatar
很简单的代码,问题求助。太迷惑了# Java - 爪哇娇娃
B*g
1
mutiple sessions insert (2 tables and only insert), 00060 error, oracle 9i,
deadlock似乎两个table都有。能是什么原因? 一个table好像有bitmap,另一个不确定
。会不会是ITL shortage?DBA不help。
谢谢
avatar
s*i
2
最近写了个代码学习一下外部类,内部类使用.一直有奇怪的问题没解决,这个胸闷啊
。用的是Eclipse,java。
代码结构式:
定义一个外部类whiletest,有一个boolean型的成员变量testhappen。定义一个内部类
Timer,内部类作为单独的线程每隔500ms改变一下testhappen的值(true/false)。
同时外部类的实例化对象调用print()是个死循环,一直打印testhappen的值。
按理说应该是当testhappen被Timer变为true之后,print()有输出;变为false之后,
print()没有输出。可是我运行时就是没有print()的输出。
奇怪的是什么,我在print()里面设置一个断电,debug调试的时候竟然能停下来。
总之就是正常全速运行不好使,debug没问题。
这个问题真是个小虫子,难受啊。
//Outerclass
public class whiletest {

boolean testhappen = true;
int i = 0;

void print(){
while(true) //Infinity loop
{
if(testhappen)
{
System.out.println("testhappen: "+testhappen);
testhappen = false;
}
}
}
//Innerclass to set testhapppen
public class timer extends Thread{

public void run(){
System.out.println("timer started");

while(true)
{
try {
sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
testhappen = true;

try {
sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
testhappen = false;
}
}
}
public static void main ( String[] args )
{
whiletest test = new whiletest(); //
test.new timer().start(); //Start timer;
test.print();
}
}
avatar
v*r
3
Drop bitmap index,it is the cause of dead lock in your case, not ITL slot.
avatar
g*g
4
Add a volatile to your boolean or use AtomicBoolean.
avatar
B*g
5
我觉得也是。另一个table也有bitmap,不知道哪个变态加的,现在谁都不承认

【在 v*****r 的大作中提到】
: Drop bitmap index,it is the cause of dead lock in your case, not ITL slot.
avatar
s*i
6
Problem solved!

【在 g*****g 的大作中提到】
: Add a volatile to your boolean or use AtomicBoolean.
avatar
v*r
7
嘿, that is why we need "change control" in place.
avatar
N*n
8
把程序弄成死循环?不是什么好习惯吧。。

【在 s****i 的大作中提到】
: 最近写了个代码学习一下外部类,内部类使用.一直有奇怪的问题没解决,这个胸闷啊
: 。用的是Eclipse,java。
: 代码结构式:
: 定义一个外部类whiletest,有一个boolean型的成员变量testhappen。定义一个内部类
: Timer,内部类作为单独的线程每隔500ms改变一下testhappen的值(true/false)。
: 同时外部类的实例化对象调用print()是个死循环,一直打印testhappen的值。
: 按理说应该是当testhappen被Timer变为true之后,print()有输出;变为false之后,
: print()没有输出。可是我运行时就是没有print()的输出。
: 奇怪的是什么,我在print()里面设置一个断电,debug调试的时候竟然能停下来。
: 总之就是正常全速运行不好使,debug没问题。

avatar
B*g
9
hehe, that is why we need CTO to say "if you don't follow standard, you are
fired"

【在 v*****r 的大作中提到】
: 嘿, that is why we need "change control" in place.
avatar
s*i
10
那请问JAVA里像我这种程序怎么避免死循环?谢谢]

【在 N*n 的大作中提到】
: 把程序弄成死循环?不是什么好习惯吧。。
avatar
N*n
11
你那程序我还看不太懂,不过,如果我要改会设一个足够大的循环次数数,或者有一个
输入可以把循环停下来。。

【在 s****i 的大作中提到】
: 那请问JAVA里像我这种程序怎么避免死循环?谢谢]
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。