zoukankan      html  css  js  c++  java
  • Java交替打印两个字符串

    一、使用volatile关键字

    public class Main {
    volatile int x = 0;
    
    Main() {
        new Thread(() -> {
            while (x < 100) {
                while (x % 2 == 0) ;
                System.out.print("A");
                x++;
            }
        }).start();
        new Thread(() -> {
            while (x < 100) {
                while (x % 2 == 1) ;
                System.out.print("B");
                x++;
            }
        }).start();
    }
    
    public static void main(String[] args) {
        new Main();
    }
    }
    

    二、使用atomicInteger

    import java.util.concurrent.atomic.AtomicInteger;
    
    public class Main {
    
    Main() {
        final AtomicInteger x = new AtomicInteger(0);
        new Thread(() -> {
            while (x.get() < 100) {
                while (x.get() % 2 == 0) ;
                System.out.print("A");
                x.incrementAndGet();
            }
        }).start();
        new Thread(() -> {
            while (x.get() < 100) {
                while (x.get() % 2 == 1) ;
                System.out.print("B");
                x.incrementAndGet();
            }
        }).start();
    }
    
    public static void main(String[] args) {
        new Main();
    }
    }
    

    三、使用锁

    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
    
    public class Main {
    Lock x = new ReentrantLock();
    int index = 0;
    
    Main() {
        new Thread(() -> {
            boolean over = false;
            while (!over) {
                if (index % 2 == 0) {
                    x.lock();
                    if (index % 2 == 0) {
                        System.out.print("A");
                        index++;
                    }
                    over = index > 100;
                    x.unlock();
                }
            }
        }).start();
        new Thread(() -> {
            boolean over = false;
            while (!over) {
                if (index % 2 == 1) {
                    x.lock();
                    if (index % 2 == 1) {
                        System.out.print("B");
                        index++;
                    }
                    over = index > 100;
                    x.unlock();
                }
            }
        }).start();
    }
    
    public static void main(String[] args) {
        new Main();
    }
    }
    

    四、使用synchronized关键字

    import java.util.concurrent.locks.Lock;
    import java.util.concurrent.locks.ReentrantLock;
    
    public class Main {
    int index = 0;
    
    Main() {
        new Thread(() -> {
            boolean over = false;
            while (!over) {
                if (index % 2 == 0) {
                    synchronized (this) {
                        if (index % 2 == 0) {
                            System.out.print("A");
                            index++;
                        }
                        over = index > 100;
                    }
                }
            }
        }).start();
        new Thread(() -> {
            boolean over = false;
            while (!over) {
                if (index % 2 == 1) {
                    synchronized (this) {
                        if (index % 2 == 1) {
                            System.out.print("B");
                            index++;
                        }
                        over = index > 100;
                    }
                }
            }
        }).start();
    }
    
    public static void main(String[] args) {
        new Main();
    }
    }
    

    五、使用Python

    JavaScript是单线程的,Python可以实现多线程,但是Python的多线程不能充分利用多核。
    这就相当于Python天生就不需要volatile。

    a = "床前明月光疑是地上霜"
    from threading import Thread
    
    index = 0
    
    
    def one():
        global index
        while index < len(a):
            while index % 2 == 0:
                pass
            if index >= len(a): break
            print(a[index])
            index += 1
    
    
    def two():
        global index
        while index < len(a):
            while index % 2 == 1:
                pass
            if index >= len(a): break
            print(a[index])
            index += 1
    
    
    Thread(target=one).start()
    Thread(target=two).start()
    
    
  • 相关阅读:
    jquery的动画函数animate()讲解一
    用js来实现页面的换肤功能(带cookie记忆)
    Extjs换肤+cookie皮肤记忆功能
    jquery换肤
    bootstrap的alert提示框的关闭后再显示问题
    jquery.cookie中的操作
    CSS中设置margin:0 auto; 水平居中无效的原因分析
    jQuery 遍历 json 方法大全
    jquery.min.map 404 (Not Found)出错的原因及解决办法
    AJAX 跨域请求的解决办法:使用 JSONP获取JSON数据
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/9511289.html
Copyright © 2011-2022 走看看