小编Vas*_*lis的帖子

奇怪的死锁(?)

我在使用两个线程的Java应用程序中遇到了一个非常奇怪的死锁.两个线程都将数据读写到共享散列映射.为了避免同步问题,我使得同步读取和写入数据的函数的hashmap:

private synchronized boolean identifiedLinksHasKey(String linkKey){
        return Parser.identifiedLinks.containsKey(linkKey);
}


private synchronized void putToIdentifiedLinks(String key, TreeSet<String> aset){     
        Parser.identifiedLinks.put(key,aset);
}
Run Code Online (Sandbox Code Playgroud)

但是,程序在某些时候会挂起(当我使用单个线程运行它时不会发生这种情况).为了调试我的应用程序,我在挂起后使用了jstack,这给了我以下的线程转储:

"thread-2"prio = 6 tid = 0x0000000006b09800 nid = 0x78fc runnable [0x00000000083ef000]
java.lang.Thread.State:在bgp.parser.Entry的java.util.HashMap.put(未知来源)中的RUNNABLE.putToIdentifiedLinks(Entry.java:297) - 在bgp.parser.Entry.run的bgp.parser.Entry.parseTxtFile(Entry.java:141)中锁定<0x00000000853f2020>(bgp.parser.Entry)(Entry.java:31 )

"Thread-1"prio = 6 tid = 0x0000000006b52800 nid = 0x9390 runnable [0x00000000082ef000]
java.lang.Thread.State:java.util.HashMap.containsKey(未知来源)java.util.HashMap.getEntry(未知来源)的RUNNABLE )在bgp.parser.Entry.identifiedLinksHasKey(Entry.java:281) -在bgp.parser.Entry.parseTxtFile(Entry.java:134)在bgp.parser.Entry.run(Entry.java:31锁定<0x00000000853f00e0>(一个bgp.parser.Entry) )

它接缝两个线程同时访问两个同步函数,这与同步的含义相矛盾.即使我使用对象锁,也会发生相同的情况.虽然线程的状态不是BLOCKED但是RUNNABLE它们表现为阻塞,可能是因为它们同时访问同一个hashmap.

如果有人能解释我为什么会发生这种奇怪的情况,我真的很感激.

java multithreading synchronization deadlock

1
推荐指数
1
解决办法
1550
查看次数

while循环中继续的奇怪行为

我在TCL编程方面相当新,通过基础知识我遇到了以下代码片段:

set x 0;
while "$x < 3" {
    set x [expr $x + 1]
    if {$x >6} break;
    if "$x > 2" continue;
    puts "x is $x"; 
    }
puts "exited second loop with X equal to $x\n"
Run Code Online (Sandbox Code Playgroud)

执行时,结果如下:

x是1
x是2个
退出的第二个循环,X等于7

令我惊讶的是,当执行continue命令时,似乎没有评估while循环测试(x <3).但是在tcl联机帮助页中声明" 正文中的continue语句将停止代码的执行,并且将重新评估测试. "

我错过了什么?

continue tcl while-loop

1
推荐指数
1
解决办法
879
查看次数

在Python中处理for循环的索引

是否可以在Python for循环中操作索引指针?

例如在PHP中,将打印以下示例1 3:

$test = array(1,2,3,4);
for ($i=0; $i < sizeof($test); $i++){
    print $test[$i].' ';
    $i++;
}
Run Code Online (Sandbox Code Playgroud)

但是在Python中,当我尝试增加索引时没有任何效果.例如,以下将打印所有数字:

test = ['1', '2', '3', '4']
for i in xrange(len(test)):
  print test[i]
  i=i+1
Run Code Online (Sandbox Code Playgroud)

有没有办法在循环内操作for循环指针,这样我就可以实现一些复杂的逻辑(例如,返回2步然后转发3)?我知道可能有其他方法来实现我的算法(这就是我现在所做的),但我想知道Python是否提供了这种能力.

python indexing for-loop

1
推荐指数
2
解决办法
3353
查看次数

小部件上的 Qt ScrollArea 弄乱了小部件的大小和位置 [Qt 5.1]

我是 Qt 的新手,我想实现一个可以动态增长的可滚动小部件,例如,在按下另一个按钮时向其中添加按钮。我尝试使用以下布局和代码来实现它:

在此输入图像描述

scrollArea = new QScrollArea(ui->outerWidget);
scrollArea->setWidget(ui->innerWidget);
layout = new QVBoxLayout(ui->outerWidget);
ui->innerWidget->setLayout(layout);
scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

// code for PushButton to add buttons in innerWidget
void MainWindow::on_pushButton_clicked()
{
    QPushButton *button = new QPushButton("button"+QString::number( nameCounter ));
    nameCounter ++;
    ui->innerWidget->layout()->addWidget(button);
}
Run Code Online (Sandbox Code Playgroud)

当我运行程序时,此实现有两个问题,首先,innerWidget 出现不合适(我在 Qt Creator 的设计模式中定义其位置),其次在布局中添加许多小部件后,滚动条不会增长,而是相反小部件变得更小以适应布局:

在此输入图像描述

另一个线程中,建议将 widgetResizable 设置为 true:

scrollArea->setWidgetResizable(true);
Run Code Online (Sandbox Code Playgroud)

滚动条现在似乎可以工作,但新的问题是innerWidget变得非常小,因此几乎不可见:

在此输入图像描述

那么,如何实现一个符合设计大小和位置的可滚动小部件呢?

layout qt scroll widget

1
推荐指数
1
解决办法
4838
查看次数

使用hostname到MySQL的PHP​​连接问题

当我尝试使用服务器的实际主机名连接到MySql数据库时,我收到以下消息:

mysql_connect():第8行/home/[username]/sendtitles.php中的用户'user'@'ip -...-.internal'(使用密码:YES)拒绝访问

也就是说,

$conn = mysql_connect("localhost",$user,$password); //WORKS!

$conn = mysql_connect($actual_hostname ,$user,$password); //Doesn't work :(
Run Code Online (Sandbox Code Playgroud)

我很感激你帮助我理解为什么会这样.

php mysql

0
推荐指数
1
解决办法
3381
查看次数

MySQL性能极其缓慢

我有一个包含大约500K作业的表,每个作业都有一个唯一的ID用作主键,状态用于指示作业是挂起,完成还是失败.状态是一个非关键的整数.

我的问题是,我尝试根据状态选择作业的简单查询需要花费太多时间,超过10分钟.在DB中连接了大约46个线程,我也重新启动但它没有帮助性能.

我粘贴了表模式和我尝试在此运行的查询:http: //pastie.org/10416054

有没有办法找到瓶颈和优化表,所以它不需要那么长时间?

mysql sql performance database-schema

0
推荐指数
1
解决办法
91
查看次数