Java 中怎么在一个线程里设定一个外部布尔变量的值?

2018-06-07 10:30:51 +08:00
 codechaser
    final Boolean result;
    new Thread(() -> {
	result = new DaoToUserInfo("porebook").queryUser(user);
    }).start();

像上面这样,新线程里比对两个对象是否一致,queryUser(User user)返回数据库里面是否存在该用户。但是因为时匿名类,result 已经被加了 final,那么怎么获取这个返回的布尔值呢?

3357 次点击
所在节点    Java
21 条回复
colincat
2018-06-07 10:38:02 +08:00
为什么明明应该是同步来做的,要改成异步,还有多线程编程了解一下 :)
codechaser
2018-06-07 10:41:33 +08:00
@colincat 您好!我在学习 Java,不是说查询数据库这些操作最好要用多线程吗?如果是同步操作的话能否给个提示?
colincat
2018-06-07 10:46:32 +08:00
@codechaser 数据库只是连接是使用线程池啊,从线程池中取一个线程,也是拿到结果以后再执行下面的步骤啊,可能有所差别,大体原理是这样的
colincat
2018-06-07 10:47:00 +08:00
@codechaser 找本书先看看吧
donyee
2018-06-07 11:01:42 +08:00
AtomicBoolean 是不是能解决这个,不过一般不会这么查询数据库
直接同步查询就好
codechaser
2018-06-07 11:03:05 +08:00
@donyee 直接这样吗?
```java
Boolean ss;
ss = new DaoToUserInfo("porebook").queryUser(user);
```
BBCCBB
2018-06-07 11:06:32 +08:00
用个对象包装一下才可以.
BBCCBB
2018-06-07 11:07:30 +08:00
将你的 boolean 类型的变量放到一个对象里, 然后在线程中修改这个对象里的这个 boolean 值就没问题了
StarainX
2018-06-07 11:07:34 +08:00
boolean [] result = { false };

result[0] = ....
chocotan
2018-06-07 11:12:20 +08:00
AtomicBoolean+1
codechaser
2018-06-07 11:15:08 +08:00
@BBCCBB 谢谢!这个确实可以。
codechaser
2018-06-07 11:15:20 +08:00
@chocotan 谢谢!
tianlang1989
2018-06-07 11:17:35 +08:00
其实在 Android studio 里面,你这样写提示报错以后,IDE 默认的修改策略就是设置一个 final 的数组,然后改数组[0]
codechaser
2018-06-07 11:18:49 +08:00
@chocotan 谢谢!我去查一下。
twoyuan
2018-06-07 11:35:14 +08:00
基本就是楼上说的这些了( Kotlin 就不用这么别扭
D3EP
2018-06-07 11:38:42 +08:00
按理说,你需要的是一个 Future
jimrok
2018-06-07 13:48:27 +08:00
需要个 Future,线程执行的时候,外面的 result 也许已经被垃圾回收了。
frienmo
2018-06-07 16:32:16 +08:00
1.Thread 或者 Runnable 只能执行 return void 的代码
2.于是又来 Future 的类用来获取返回类型 Future<R>
3.再后来又要获取这个执行过程是否完成,就有了 CompletableFuture
xmh51
2018-06-07 21:32:05 +08:00
楼主的场景 数据应该不是直接用 jdbc 吧。如果用了数据库连接池 这里面不需要再搞多线程
oska117
2018-06-08 12:15:21 +08:00
一般都是 把这

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/461112

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX