我对Java线程有疑问。当我仅使用主线程时,可以异步运行两个任务吗?我读了这篇文章:异步与同步执行,这实际上意味着什么? 第二个答案是可能的情况,其中只有一个线程(而不是主线程和另一个线程)并且任务被异步执行。我认为这在Java中是不可能的,因为仅存在一个控制流。我认为在Java中,每个任务都需要自己的线程来异步执行任务。
我真的在每个地方搜索过这个,我可以做同步和异步数据请求,但我实际上无法理解哪个是异步的?什么与什么同步?
如何轻松获得数据库大小的计数,以便我可以根据数据库是否为空执行适当的操作?
我有一个 App DB、视图模型、存储库、Dao 和所有其他部分,并且我的对象插入......但我无法调用onCreate()数据库中列表的大小。当我尝试获取mAppDatabase.vehicleDao().getAll().getValue().size(), 或 时mVehicleViewModel.getAll().getValue().size(),我得到空指针异常。
但是我知道我的对象正在插入,因为当我运行一个 observable 时,我可以记录它们的信息......但我无法在主线程/onCreate 中获得计数。帮助!示例代码如下:
protected void onCreate(Bundle savedInstanceState) {
...
mAppDatabase = AppDatabase.getInstance(MyActivity.this);
Log.d("LISTSIZEAPP", String.valueOf(mAppDatabase.myDao().getAll().getValue().size()));
ObserveItems();
Run Code Online (Sandbox Code Playgroud)
或者
protected void onCreate(Bundle savedInstanceState) {
...
mViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
Log.d("LISTSIZEVM", String.valueOf(mViewModel.getAll().getValue().size()));
ObserveItems();
Run Code Online (Sandbox Code Playgroud)
^ 两者的空指针异常(尝试在空对象引用上调用接口方法 'java.lang.Object[] java.util.List.toArray()')...
然而:
private void ObserveItems() {
mViewModel.getAll().observe(this, new Observer<List<Foo>>() {
@Override
public void onChanged(@Nullable final List<Foo> foos) {
mFoos= foos;
for (Vehicle v: mFoos) {
Log.d("ROOM INFO - FOOS", v.getFooTitle());
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
我可以记录我想要的所有信息。所以这些项目是明确插入的。是什么赋予了?我错过了什么?谢谢你。
java android android-room android-architecture-components android-jetpack
for (int i=0; i<100000; i++) {
// REST API request.
restTemplate.exchange(url, HttpMethod.GET, request, String.class);
}
Run Code Online (Sandbox Code Playgroud)
我有一种情况,我必须为10万用户请求一个资源,它需要70分钟才能完成.我试图尽可能地清理我的代码,我只能将它减少4分钟).
由于每个请求彼此独立,我很乐意并行发送请求(可能是10s,100s甚至1000s的块,每次快速完成).我希望我能把时间减少到10分钟或者接近的时间.如何计算哪个块大小可以快速完成工作?
我找到了以下方法,但我不知道该程序是否一次处理所有20个; 或一次5个; 或者一次10个.
IntStream.range(0,20).parallel().forEach(i->{
... do something here
});
Run Code Online (Sandbox Code Playgroud)
我知道你的帮助.我对任何建议或评论都持开放态度!
更新:我能够使用IntStream,并在28分钟内完成任务.但我不确定这是我能做的最好的.
java parallel-processing concurrency java.util.concurrent java-8
我需要使用Retrofit多次调用API REST,并在中显示响应ListView,但我不知道该怎么做,因此此代码不起作用。
模型
@GET("apks/{sha256}")
Call<DatoAPI> getTask2(@Path("sha256") String hash, @Query("Authorization") String key);
Run Code Online (Sandbox Code Playgroud)
实作
for (String s: hash) {
Call<DatoAPI> call = services.getTask2(s, API.API_KEY);
call.enqueue(new Callback<DatoAPI>() {
@Override
public void onResponse(Call<DatoAPI> call, Response<DatoAPI> response) {
if (response.isSuccessful()) {
datoAPI = response.body();
items.add(datoAPI.getApp());
}
}
@Override
public void onFailure(Call<DatoAPI> call, Throwable t) {
Toast.makeText(getApplicationContext(),t.getMessage(),Toast.LENGTH_LONG).show();
}
});
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过call.execute()和同样的问题,我想在显示此响应,ListView但它不起作用。
我试图通过参考https://dog.ceo/dog-api/documentation/上的文档从该网站提取一些数据
我正在尝试检索狗品种列表并创建一个列表。我正在使用 javaScript 的“fetch”
let dog_list = [];
fetch('https://dog.ceo/api/breeds/list/all')
.then(response => {
if (response.ok) {
return response.json();
} else {
throw new Error(response.statusText);
}
})
.then(data => dog_list = data.message)
const container = document.getElementById("container");
for (dog in dog_list) {
let li = document.createElement("li");
let node = document.createTextNode(dog);
li.appendChild(node);
container.appendChild(li);
}Run Code Online (Sandbox Code Playgroud)
<!DOCTYPE html>
<html lang="en">
<head>
<title>Dog Breed List</title>
</head>
<body>
<ul id="container"></ul>
<script src="dog_breed.js"></script>
</body>
</html>Run Code Online (Sandbox Code Playgroud)
我在第二个“then”遇到问题,我不知道如何将 json 对象转换为数组并将其显示为
我在从闭包中检索数据时遇到问题.我正在调用函数getWallImages,它应该返回一个数组.我可以从闭包内打印数组的内容,但在它之外,数组是空的.
import Foundation
import Parse
class WallPostQuery {
var result = [WallPost]()
func getWallImages() -> [WallPost] {
let query = WallPost.query()!
query.findObjectsInBackgroundWithBlock { objects, error in
if error == nil {
if let objects = objects as? [WallPost] {
self.result = objects
//This line will print the three PFObjects I have
println(self.result)
}
}
}
//this line prints [] ...empty array?
println(result)
return self.result
}
}
Run Code Online (Sandbox Code Playgroud)
如何从闭包中获取值?
我是Javascript的新手,最近知道setTimeout设置为0 millis的用法.我正在尝试实现它,但没有得到预期的结果.根据我的知识,它必须等到所有事件都完成但它没有表现得很好.请告诉我我错过了什么或我错在哪里.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Test HTML</title>
</head>
<body>
<script src="js/index.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
(function(){
setTimeout(function () {
document.write("<p>Event 0 Processed !!</p>");
},0);
setTimeout(function () {
document.write("<p>Event 1 Processed !!</p>");
},1000);
setTimeout(function () {
document.write("<p>Event 2 Processed !!</p>");
},2000);
setTimeout(function () {
document.write("<p>Event 3 Processed !!</p>");
},3000);
})();
Run Code Online (Sandbox Code Playgroud)
Event 0 Processed !!
Event 1 Processed !!
Event 2 Processed !!
Event 3 Processed !!
Run Code Online (Sandbox Code Playgroud)
我期待着类似的东西
Event 1 Processed !!
Event 2 Processed !!
Event …Run Code Online (Sandbox Code Playgroud) synchronus和asynchronus方法之间的区别是什么?
我从codeverge找到了这个q/a
当你调用一个同步方法时,它会完成工作,然后返回结果(成功,失败,可能没有返回任何内容).
当你调用异步方法时,它立即返回(你的程序可以顺利进行).完成工作后,它将调用您提供的功能.这些工作与程序运行并行完成.
但真的无法理解.
有人对此有明确的概念吗?
android ×4
java ×3
javascript ×3
android-architecture-components ×1
android-room ×1
asynchronous ×1
closures ×1
concurrency ×1
java-8 ×1
rest ×1
retrofit ×1
retrofit2 ×1
swift ×1