使用两个线程交替打印0到100的奇数和偶数

来源:互联网 发布:淘宝福利群是运作的 编辑:程序博客网 时间:2024/04/28 19:09

使用两个线程分别打印 0 到 100 的奇数和偶数,先让两个类实现Runnable 接口,再在主线程中调用,利用wait() 和 notify() 来实现,代码如下:

public class Run1 implements Runnable {    int i=-2;    @Override    public void run()    {        while(i<=98)        {            synchronized (Main.m)             {                System.out.println("Thread1: "+ (i+=2));                Main.m.notify();                try                 {                    Main.m.wait();                }                 catch (InterruptedException e)                 {                    e.printStackTrace();                }            }        }    }}
public class Run2 implements Runnable {    int i= -1;    @Override    public void run()    {        while(i<=98)        {            synchronized (Main.m)             {                System.out.println("Thread2: "+ (i+=2));                Main.m.notify();                try                 {                    Main.m.wait();                }                 catch (InterruptedException e)                 {                    e.printStackTrace();                }            }        }    }}

最后是主线程:

public class Main {   final static Main m = new Main();   //final static Object o = new Object(); 这样也可以,这样可以保证同步锁锁的是同一个对象,   //就像厕所只有一个,有人进去就锁住,而改成 Object o 之后只需在上面两个类中把 Main.m 改成   //Main.o 即可。   //需要注意的是,如果这里没有声明 Main m 或者 Object o,   //而是分别在两个类中 分别使用 this 或者 Object o 来作为锁的参数,即使用了两个对象,相当于拥有了两   //厕所,同步锁也就失去了意义。   //所以,只要保证同步锁锁的是同一个对象即可。   public static void main(String[] args)    {       new Thread(new Run1()).start();       new Thread(new Run2()).start();   }}
0 1
原创粉丝点击