final Boolean result;
new Thread(() -> {
result = new DaoToUserInfo("porebook").queryUser(user);
}).start();
像上面这样,新线程里比对两个对象是否一致,queryUser(User user)返回数据库里面是否存在该用户。但是因为时匿名类,result 已经被加了 final,那么怎么获取这个返回的布尔值呢?
final Boolean result;
new Thread(() -> {
result = new DaoToUserInfo("porebook").queryUser(user);
}).start();
像上面这样,新线程里比对两个对象是否一致,queryUser(User user)返回数据库里面是否存在该用户。但是因为时匿名类,result 已经被加了 final,那么怎么获取这个返回的布尔值呢?
|
colincatJun 7, 2018
1
为什么明明应该是同步来做的,要改成异步,还有多线程编程了解一下 :)
|
|
2
@colincat 您好!我在学习 Java,不是说查询数据库这些操作最好要用多线程吗?如果是同步操作的话能否给个提示?
|
|
colincatJun 7, 2018
3
@codechaser 数据库只是连接是使用线程池啊,从线程池中取一个线程,也是拿到结果以后再执行下面的步骤啊,可能有所差别,大体原理是这样的
|
|
colincatJun 7, 2018
4
@codechaser 找本书先看看吧
|
|
donyeeJun 7, 2018
5
AtomicBoolean 是不是能解决这个,不过一般不会这么查询数据库
直接同步查询就好 |
|
6
|
|
BBCCBBJun 7, 2018
7
用个对象包装一下才可以.
|
|
BBCCBBJun 7, 2018
8
将你的 boolean 类型的变量放到一个对象里, 然后在线程中修改这个对象里的这个 boolean 值就没问题了
|
|
StarainXJun 7, 2018
9
boolean [] result = { false };
result[0] = .... |
|
chocotanJun 7, 2018
10
AtomicBoolean+1
|
|
11
@BBCCBB 谢谢!这个确实可以。
|
|
12
@chocotan 谢谢!
|
|
tianlang1989Jun 7, 2018
13
其实在 Android studio 里面,你这样写提示报错以后,IDE 默认的修改策略就是设置一个 final 的数组,然后改数组[0]
|
|
14
@chocotan 谢谢!我去查一下。
|
|
twoyuanJun 7, 2018
15
基本就是楼上说的这些了( Kotlin 就不用这么别扭
|
|
D3EPJun 7, 2018
16
按理说,你需要的是一个 Future
|
|
jimrokJun 7, 2018
17
需要个 Future,线程执行的时候,外面的 result 也许已经被垃圾回收了。
|
|
18
1.Thread 或者 Runnable 只能执行 return void 的代码
2.于是又来 Future 的类用来获取返回类型 Future<R> 3.再后来又要获取这个执行过程是否完成,就有了 CompletableFuture |
|
xmh51Jun 7, 2018
19
楼主的场景 数据应该不是直接用 jdbc 吧。如果用了数据库连接池 这里面不需要再搞多线程
|
|
oska117Jun 8, 2018 via Android
20
一般都是 把这
|
|
oska117Jun 8, 2018 via Android
21
一般都是 用数组就包含一个值,然后修改这个数组[0],当然,你也可以新建个对象,然后操作这个对象属性
|