从特定线程调用方法是否会自动使其在单独的核心上运行?

时间:2016-02-11 06:01:07

标签: java multithreading

例如,我制作两个帖子:

ExampleThread t1 = new ExampleThread();   
ExampleThread t2 = new ExampleThread();
t1.start();
t2.start();

然后在每个线程中的run()中的任何内容都完成了。然而,我知道我仍然可以打电话,比方说,

t1.exampleMethod();

运行完毕后()完成。这是否适用于它自己的核心?

感谢。

3 个答案:

答案 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()才会在该主题中运行它。