通过运行方法和Start方法执行Thread

Executing Thread by run method and Start method

我正在尝试使用 thread.Run 以及 thread.start

将 Thread 执行到 Both 方法中

这里是案例 主要 Class

Thread thread = new GetTimeZones();
ByImletingInterface thread21 = new ByImletingInterface();
thread21.getMailStarttime(5);

ByImletingInterface thread2 = new ByImletingInterface();
thread2.getMailStarttime(10);

thread.start();
new Thread(thread21).start();
new Thread(thread2).start();

线程 1

public class ByImletingInterface implements Runnable {
    private int starttime;

    @Override
    public void run() {
        // TODO Auto-generated method stub
        try {
            Thread.sleep(starttime * 1000);
        } catch (Exception e) {
            // TODO: handle exception
            System.out.println(e);
        }
        System.out.println("Checking Mail");
    }

}

和其他人

public class GetTimeZones extends Thread {

    @SuppressWarnings("static-access")
    @Override
    public void run() {
        // TODO Auto-generated method stub
        Locale locale;
        DateFormat timeforMatter;
        DateFormat dateforMatter;
        String timeoutput = null;
        String dateoutput = null;

        try {
            java.util.Date date;

            for (int i = 0; i < 20; i++) {
                date = new Date();
                locale = new Locale("en");

                timeforMatter = DateFormat.getTimeInstance(DateFormat.DEFAULT,
                        locale);
                dateforMatter = DateFormat.getDateInstance(DateFormat.DEFAULT,
                        locale);

                //System.out.println(timeforMatter);
                timeoutput = timeforMatter.format(date);
                dateoutput = dateforMatter.format(date);

                System.out.println(timeoutput);
                System.out.println(dateoutput);
                System.out.println();


                try {
                    Thread.sleep(2000);
                } catch (Exception e) {
                    // TODO: handle exception
                }
            }

        } catch (Exception e) {
            // TODO: handle exception
            System.out.println(e);
            e.printStackTrace();
        }

        super.run();
    }
}

如何描述我的概率 class 是不需要的,但我还是给了它。

当我像以前一样使用 therad.start 进入主 class 时。它有意识地执行三个线程。

但是当我使用 theread.run 时,一个一个地执行。意味着它的同步。为什么会这样?

当你调用run()方法时,你是运行在当前线程上调用它,所以它当然会运行一个一个地执行,因为只有一个线程(每个 run() 方法将在前一个方法完成后执行)。

只有当你调用start()时才会创建一个新线程并在那个新线程中执行run()方法。