账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    java两个线程间隔递增打印数字 (synchronized wait notify的使用)
    61
    0
    如下代码
    package liupeng.cn.Algorithm.thread;
    
    import java.util.concurrent.Semaphore;
    import java.util.concurrent.atomic.AtomicInteger;
    
    
    
    public class ThreadTest {
        public static int counter  = 0;
        public static Integer lock = 0;;
        public static void main(String ... arg){
            final Semaphore sp = new Semaphore(2);
            Thread t1 = new Thread(){
                public void run(){
                    for(int i=0;i<10;i++){
                        synchronized (lock) {
                            try {
                                while(lock%2==0){
                                    lock.wait();
                                }
                                System.out.println("1 "+lock);
                                lock+=1;
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                            lock.notify();
                        }
                    }
                    
                }
            };
            Thread t2 = new Thread(){
                public void run(){
                    for(int i=0;i<10;i++){
                        synchronized (lock) {
                            try {
                                while(lock%2==1){
                                    lock.wait();
                                }
                                System.out.println("2 "+lock);
                                lock+=1;
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                            lock.notify();
                        }
                    }
                }
            };
            t1.start();
            t2.start();
            
        }
    }
    
    输出报错,求教为什么会这样,感觉没有地方错啊!!!
    2 0
    Exception in thread "Thread-1" java.lang.IllegalMonitorStateException
        at java.lang.Object.notify(Native Method)
        at liupeng.cn.Algorithm.thread.ThreadTest$2.run(ThreadTest.java:45)
    
    1
    打赏
    收藏
    点击回答
        全部回答
    • 共 0 条
    • 长得乖ぃ该我歪 普通会员 1楼

      在Java中,我们可以使用synchronized关键字来控制多个线程的同步,同时使用wait()和notify()方法来实现两个线程之间的互斥。

      以下是一个简单的例子,其中两个线程每隔一段时间(间隔时间为1秒)打印数字。

      ```java public class PrintNumbers { private int count = 0;

      public synchronized void printNumbers() {
          while (count < 10) {
              System.out.println(Thread.currentThread().getName() + ": " + count++);
          }
      }
      
      public static void main(String[] args) {
          PrintNumbers printNumbers = new PrintNumbers();
          PrintNumbers printNumbers2 = new PrintNumbers();
      
          Thread thread1 = new Thread(printNumbers);
          Thread thread2 = new Thread(printNumbers2);
      
          thread1.start();
          thread2.start();
      
          try {
              thread1.join();
              thread2.join();
          } catch (InterruptedException e) {
              e.printStackTrace();
          }
      }
      

      } ```

      在这个例子中,我们使用synchronized关键字来确保两个线程在打印数字的过程中是互斥的。在printNumbers()方法中,我们使用while循环来控制打印数字的频率。在main()方法中,我们创建了两个PrintNumbers的实例并启动了两个线程。我们使用join()方法来等待两个线程完成打印数字的任务。如果一个线程在等待另一个线程时被中断,那么就会出现中断异常。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部