如何在android中同时运行2个线程

Pih*_*ihu 2 java multithreading android

我是android编程的新手.如果之前已经问过这类问题.我在创建线程时遇到麻烦.在我的代码中,我已经初始化int i=500;并在我的第一个线程t1中,我想增加t1的值,if(i<5000)并且还在我的线程t2上想要检查t2的值减少的条件if(i>0) 请帮助...提前致谢

uma*_*ali 6

这是Android的普通java Thread实现,因为你需要这个特定的增量/减量问题...

// class lass level declarations
private static int DEF_VALUE = 500;
private static int MIN_VALUE = 0;
private static int MAX_VALUE = 1000;

private AtomicInteger i = new AtomicInteger(DEF_VALUE);
private Thread t1 = null;
private Thread t2 = null;

private void initThreads() {
    Log.i(TAG, "Initializing Threads...");

    t1 = new Thread(new Runnable() {

        @Override
        public void run() {
            Log.i(TAG, "Starting T1.");
            while (i.get() < MAX_VALUE) {
                i.incrementAndGet();
                Log.d(TAG, String.format("Incremented by T1, i = %d", i.get()));
            }
            Log.i(TAG, "Finishing T1.");
        }
    });

    t2 = new Thread(new Runnable() {

        @Override
        public void run() {
            Log.i(TAG, "Starting T1.");
            while (i.get() > MIN_VALUE) {
                i.decrementAndGet();
                Log.d(TAG, String.format("Decremented by T2, i =  %d", i.get()));
            }
            Log.i(TAG, "Finishing T2.");
        }
    });

    t1.start();
    t2.start();
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助...:)

更新:更新源以使用AtomicInteger而不是plain int来避免并发访问问题.

  • share state必须是atomic或`volatile`,否则如果线程在不同的处理器上运行,则无法保证上面的线程会看到变量'i'处于相同的状态. (2认同)