最近写一个小玩意遇到卡线程状况,分析来去始终有点迷惑,想问一
aide吧
全部回复
仅看楼主
level 7
最近写一个小玩意遇到卡线程状况,分析来去始终有点迷惑,想问一下懂的兄弟们。
线程的循环要怎么写才最合适呢?
线程中有一个循环,我要问的,是这个循环是在线程中以一个函数循环,还是循环线程来调用这个函数。比如下面
hd = new Thread(new 线程一());
hd.start();
class 线程一 implements Runnable
{
@Override
public void run()
{
循环写到内部函数();
}
}
另一种方法就是
class 线程一 implements Runnable
{
@Override
public void run()
{
while(true)
{
循环不写到函数();
}
}
}
我想问下,这两种写法,那种最正确。先谢谢各位大大了
2019年11月14日 01点11分 1
level 14
第二种比较好,因为有时候需要从线程外同步某些变量,以此确定线程是否提前结束,或者执行其他功能。
2019年11月14日 01点11分 2
谢谢兄弟,我做一下测试
2019年11月14日 02点11分
level 7
有区别吗,没有看到区别
2019年11月14日 16点11分 3
目前我线程循环,在run中循环会出错,循环到函数中就不会,奇怪了
2019年11月17日 03点11分
@贴吧用户_02e3aAb 可以的话贴代码看看
2019年11月17日 03点11分
@天下89652 我把线程中的控件操作取消了,就不会有问题了
2019年11月18日 03点11分
level 7
你不会是在线程中更新了控件了吧
2019年11月17日 03点11分 4
你这说的真准,我在线程中用handleMessage接收了消息,让后更新控件
2019年11月18日 03点11分
level 8
while (!interrupted) {
// code
}
2019年11月17日 22点11分 5
谢谢,有点没懂你意思
2019年11月18日 03点11分
level 7
如果while逻辑依赖“线程1”里的属性,就用方法2,如果不依赖可以用方法1,但是推荐方法2,理由:可以一眼看出线程里执行的是循环,而且便于后期升级,还有一个标准,一个方法不应该逻辑太复杂,能拆就拆,不过不建议线程内及下级函数过于复杂,while循环应该尽量做简单的事,比如监听某个事件的产生。
2019年11月19日 09点11分 6
level 6
循环写在线程内容易卡死。正确做法应该是再循环内写线程
2019年11月19日 11点11分 7
level 6
例如,for一百次,里面再写线程下载图片,绝对卡死(虽然UI界面不会卡,但下载卡死了)
2019年11月19日 11点11分 8
1