[英]Implementing multi-threading to make two classes run simultaneously
我将首先说我已经研究了多线程是如何工作的,因为我认为它将帮助我解决我遇到的问题,但是我并不真正理解它的实现是如何工作的。 现在,我已经设置了我的程序,这样当你按下按钮时它会触发MyTask。 MyTask在按钮下方运行一个计数器,最多10个,当它到达那里时停止,一旦它到达那里,MyTask1得到执行,启动计数器从按钮上方的10到0倒数。 我遇到的问题是,在Java中,事情是相继运行的,但我想要做的是让MyTask和MyTask1同时运行,这样两个计数器就会立刻发生。 我认为多线程可以帮助我,但我真的不明白如何使用它。 任何帮助,将不胜感激。 谢谢大家。
码:
package com.example.week11;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import org.w3c.dom.Text;
public class MainActivity extends AppCompatActivity {
Button btn;
TextView txt;
Integer count =1;
Integer count1 =10;
TextView txt1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//p
//p
btn = (Button) findViewById(R.id.button);
btn.setText("Start");
txt = (TextView) findViewById(R.id.textView);
txt1 = (TextView) findViewById(R.id.textView2);
View.OnClickListener listener = new View.OnClickListener(){
public void onClick(View view){
count =1;
//p
//p
switch (view.getId()){
case R.id.button:
new MyTask().execute(10);
new MyTask1().execute(0);
break;
}
}
};
btn.setOnClickListener(listener);
}
class MyTask extends AsyncTask<Integer, Integer, String> {
@Override
protected String doInBackground(Integer... params) {
for (; count <= params[0]; count++) {
try {
Thread.sleep(1000);
publishProgress(count);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return "Task Completed.";
}
@Override
protected void onPostExecute(String result) {
txt.setText(result);
btn.setText("Restart");
}
@Override
protected void onPreExecute() {
txt.setText("Task Starting...");
}
@Override
protected void onProgressUpdate(Integer... values) {
txt.setText("BackGround Task Running..."+ values[0]);
}
}
class MyTask1 extends AsyncTask<Integer, Integer, String> {
@Override
protected String doInBackground(Integer... params) {
for (; count1 >= params[0]; count1--) {
try {
Thread.sleep(1000);
publishProgress(count1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return "Task Completed.";
}
@Override
protected void onPostExecute(String result) {
txt1.setText(result);
btn.setText("Restart");
}
@Override
protected void onPreExecute() {
txt1.setText("Task Starting...");
}
@Override
protected void onProgressUpdate(Integer... values) {
txt1.setText("Countdown "+ values[0]);
}
}
}
android中的AsyncTask
在单线程上运行,直到您明确指定它使用多个线程。
在AsyncTask
源代码中,您可以看到默认的Executor
是SERIAL_EXECUTOR
。 源代码: https : //github.com/aosp-mirror/platform_frameworks_base/blob/master/core/java/android/os/AsyncTask.java
您可以指定<YourAsyncTask>.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)
以使AsyncTask
执行并行执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.