多线程踩坑

public  class ThreadTest implements Runnable {
    private static int j=0;
    Object object =new Object();
    private String name;
    private ThreadTest(String name)
    {
        this.name=name;
    }

    public static void main(String[] args) throws InterruptedException{
        Thread t1 = new Thread(new ThreadTest("xu"));
        Thread t2 = new Thread(new ThreadTest("shi"));

        t2.start();
        System.out.println("hhh");
        t1.start();
       // t2.notify();
    }

    public void run(){
        synchronized (object) {
            for (int i = 0; i < 10; i++) {
                try {
                    object.wait(100);//Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }catch (IllegalMonitorStateException e){
                    //e.printStackTrace();
                }

                j++;
                System.out.println(i + name);
            }
        }
    }

}

wait时结果如下

hhh
0shi
0xu
1shi
1xu
2shi
2xu
3shi
3xu
4xu
4shi
5shi
5xu
6xu
6shi
7shi
7xu
8xu
8shi
9shi
9xu

sleep时结果如下

hhh
0shi
0xu
1xu
1shi
2xu
2shi
3shi
3xu
4xu
4shi
5shi
5xu
6shi
6xu
7xu
7shi
8xu
8shi
9xu
9shi

显然,sleep()实现了线程并发,wait()也同样。

注意:wait()是Object的方法,sleep()是Thread的静态方法。

原文地址:https://www.cnblogs.com/BBchao/p/7884683.html