例如,我制作两个帖子:
ExampleThread t1 = new ExampleThread();
ExampleThread t2 = new ExampleThread();
t1.start();
t2.start();
然后在每个线程中的run()中的任何内容都完成了。然而,我知道我仍然可以打电话,比方说,
t1.exampleMethod();
运行完毕后()完成。这是否适用于它自己的核心?
感谢。
答案 0 :(得分:4)
首先,你不想扩展Thread而是实现Runnable,事实上这样做可能有助于消除你的一些困惑,因为即使t1扩展了一个Thread,你调用一个方法< strong>不在该线程上运行,即t1线程,而是将在调用它的线程中运行。
另请注意,在线程的运行完成后,#34;线程不再运行 - 它已完成,消失,kaput。
答案 1 :(得分:1)
@Override
protected void onCreate(Bundle savedInstanceState) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(getResources().getColor(R.color.clr_black));
}
super.onCreate(savedInstanceState);
setContentView(R.layout.my_location);
getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setElevation(0);
// Search for the map fragment to finish setup by calling init().
mapFragment = (MapFragment)getFragmentManager().findFragmentById(R.id.mapfragment);
mapFragment.init(new OnEngineInitListener() {
@Override
public void onEngineInitializationCompleted(OnEngineInitListener.Error error) {
if (error == OnEngineInitListener.Error.NONE) {
// retrieve a reference of the map from the map fragment
map = mapFragment.getMap();
// Set the map center to the Vancouver region (no animation)
map.setCenter(new GeoCoordinate(49.196261, -123.004773, 0.0),
Map.Animation.NONE);
// Set the zoom level to the average between min and max
map.setZoomLevel(
(map.getMaxZoomLevel() + map.getMinZoomLevel()) / 2);
} else {
System.out.println("ERROR: Cannot initialize Map Fragment " + error.toString());
Toast.makeText(MyLocation.this, " Error: " + error.toString(), Toast.LENGTH_LONG).show();
}
}
});
}
any suggestions.
这是一个普通的方法调用,它将在同一个线程中执行。(没有新线程)
t1.exampleMethod();
这会创建一个新的线程,开始执行t1.start();
方法,完成后,它的工作就完成了。
答案 2 :(得分:1)
忘记t1.exampleMethod()
,即使t1.run()
也无法在t1
帖子中运行。
除非您致电t1.start()
只有t1.start()
才会在该主题中运行它。