Java同时执行

时间:2016-05-03 16:12:58

标签: java

我正在尝试同时执行两个作业。我要做的其中一件事就是显示一个倒计时器,另一件是移动球。

这是我创建计时器并调用moveBall方法的地方

    button.addChangeListener(new ChangeListener() {

        int start = 0;

        public void stateChanged(ChangeEvent e) {

            ActionListener taskPerformer = new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    timeValue.setText(++start + " sec");
                }
            };

            timer = new Timer(1000, taskPerformer);
            timer.start();

            ball.moveBall();

        }
    });

这是我的moveBall方法

public void moveBall() {

    Thread ball = new Thread() {

        double counter = 0;

        int t = (int) (2 * Vy / 9.8);  

        public void run() {
            try {
                while (t >= 0) {
                    // calculate Vx and Vy

                    Ball.this.setX(Ball.this.getX() + Vx);
                    Ball.this.setY(Ball.this.getY() - Vy);

                    counter += 50;

                    if (counter == 1000) {
                        t--;
                        counter = 0;
                    }

                    paintingComponent.repaint();

                    Thread.sleep(20);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    };

    ball.start();
}

当我执行上面的代码时,用于显示时间的标签在球移动期间根本没有变化,当移动结束时,它需要最后一个数字。

1 个答案:

答案 0 :(得分:0)

这是两个线程的两个执行示例,Java并发执行

public class ThreadExecutor extends Thread {

    private String name;

    private int executionCount;

    public ThreadExecutor(final String name, final int executionCount) {
        this.name = name;
        this.executionCount = executionCount;
    }

    @Override
    public void run() {

        int count = 1;

        while (count <= executionCount) {
            System.out.println("Executing thread ".concat(name).concat(" : ") + count);
            count++;
        }

     }
}

    public class Main {

        public static void main(String args[]) {

            final ThreadExecutor one = new ThreadExecutor("One", 1);
            final ThreadExecutor two = new ThreadExecutor("Two", 2);

            one.start();
            two.start();
        }
}