`

java 不同线程之间的切换(wait和notify)

 
阅读更多
package com.thread;  
  
/** 
 * 创建两个线程,一个线程循环10次,另一个线程100次,两者交替运行50次 
 * 即到A线程时,它运行本身循环的10次之后;马上轮到B线程,它则运行本身的100次循环 
 * 以此轮换切换线程共50次 
 */  
public class ThreadTest {  
    public static void main(String[] args) {  
          
        final Business business=new Business();  
  
          
        //子线程  
        new Thread(new Runnable() {  
            public void run() {
                // 每次执行完都会进行唤醒其他方法执行  
                for (int i = 0; i < 50; i++) {  
                    try {  
                        business.sub(i);  
                    } catch (InterruptedException e) {  
                        // TODO Auto-generated catch block  
                        e.printStackTrace();  
                    }  
                }  
            }  
        }).start();  
          
//----------------------------线程二-------------------------------------------------  
          
        //main方法本身是个线程,即线程二运行代码直接放到main方法中  
        for (int i = 0; i < 50; i++) {  
            try {  
                business.main(i);  
            } catch (InterruptedException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
        }  
          
    }  
}  
  
class Business{  
    private boolean isSub=true;//当前运行的方法是sub()  
      
    //线程一  
    public synchronized void sub(int i) throws InterruptedException {  
        while (!isSub) {  
            this.wait();  
        }  
        for (int j = 0; j < 10; j++) {  
            System.out.println("sub thread sequence is "+j+" and loop is "+i);  
        }  
        isSub = false;  
        this.notify();  
    }  
      
    //主线程,即main  
    public synchronized void main(int i) throws InterruptedException{  
        while (isSub) {  
            this.wait();  
        }  
        for (int j = 0; j < 100; j++) {  
            System.out.println("main thread sequence is "+j+" and loop is "+i);  
        }  
        isSub = true;  
        this.notify();  
    }  
}  





分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Java多线程机制(讲述java里面与多线程有关的函数)

    线程代表了程序中的执行流,可以在不同的线程之间切换以共享CPU时间。线程的状态包括新建、运行、中断和死亡。线程的生命周期始于新建,通过调用start()方法进入就绪状态,然后可能进入运行、阻塞或等待,最后在run...

    java多线程课件

    Java提供了多种同步机制,如synchronized关键字、wait()和notify()方法、Lock接口以及相关的实现类如ReentrantLock。这些机制确保了在并发环境中,对共享资源的访问是有序和安全的。 异常处理在多线程编程中同样...

    Java多线程编程详解

    3. **线程通信**:实现线程间的数据交换和状态通知,通常借助于`wait()`, `notify()`, `synchronized`等机制。 综上所述,Java多线程编程不仅提供了强大的并发执行能力,同时也带来了复杂度更高的问题,需要开发者...

    java多线程.pdf

    - **等待/唤醒机制**:通过`wait()`、`notify()`和`notifyAll()`方法实现线程间的等待和唤醒。 ##### 3. 线程的状态和生命周期 线程在其生命周期中会经历不同的状态,包括新建(`NEW`)、就绪(`RUNNABLE`)、阻塞(`...

    java 多线程编程实战指南(核心 + 设计模式 完整版)

    - **线程间通信**:`wait()`, `notify()` 和 `notifyAll()` 方法用于线程间的协作,需要在同步块或方法中使用。 3. **线程池** - **Executor框架**:`ExecutorService`、`ThreadPoolExecutor`和`Executors`工厂类...

    JAVA多线程模型详解

    Java线程具有创建、就绪、运行、阻塞和死亡五种状态。创建状态是指用new操作创建了一个Thread实例,但尚未调用start()方法;就绪状态是指线程可以运行,但CPU还未分配时间片;运行状态是指线程获得CPU时间片,正在...

    java 多线程课件

    另外,wait()、notify()和notifyAll()用于线程间通信,这些方法需要在同步块或同步方法中使用,以防止唤醒错误的线程。 总的来说,Java多线程提供了一套强大的工具和机制,使得开发者能够编写出高效、安全的并发...

    java多线程编程

    线程同步是解决线程间共享数据时可能出现的问题,如死锁、活锁和饥饿,Java提供了`synchronized`关键字、`wait()`、`notify()`和`notifyAll()`方法,以及`Lock`接口(如`ReentrantLock`)来实现线程安全。...

    java多线程进阶

    3. **线程通信**:Java的`wait()`, `notify()`, `notifyAll()`方法用于线程间的通信,以及`BlockingQueue`等并发容器在通信中的应用,也是书中重点内容。此外,可能会探讨`join()`, `Thread.yield()`等控制线程行为...

    基于Java synchronized同步锁实现线程交互.pdf

    "基于Java synchronized同步锁实现线程交互" Java多线程能够提高CPU利用...因此,在使用Java多线程的场景中,请充分理解Java线程各状态之间的关系及其切换,并使用synchronized、wait()和notify()方法实现线程交互。

    JAVA多线程教材

    在多线程环境中,数据共享可能导致竞态条件和死锁,Java提供了多种同步机制来避免这些问题,如synchronized关键字、volatile变量、Lock接口(ReentrantLock、Semaphore等)以及wait()、notify()和notifyAll()方法。...

    Java_多线程与并发编程总结.doc

    Java提供了多种同步机制,如`synchronized`关键字、`wait()`、`notify()`和`notifyAll()`方法,以及`Lock`接口(包括`ReentrantLock`等)来避免竞态条件和死锁的发生,确保共享数据在多线程环境下的正确性。...

    Java线程.ppt

    Java线程允许程序在同一时间执行多个不同的任务,从而提高了程序的效率和响应性。在燕山大学信息学院计算机系的课程中,李峰教授讲解了Java线程的多个关键知识点。 首先,线程是一个程序内部的顺序控制流,它是执行...

    java多线程学习必备_快速理解java多线程(附代码和运行结果截图和解释文档)

    2. **wait/notify机制**:在线程间进行通信,`wait()`、`notify()`和`notifyAll()`方法在`Object`类中,需在同步块或方法中使用,用于线程间的等待和唤醒。 3. **volatile关键字**:用于确保多线程环境下的可见性和...

    Java多线程实例图形版

    wait()、notify()和notifyAll()方法用于线程间的通信,使得线程可以等待特定条件满足后再继续执行;还有volatile关键字保证了多线程环境下的可见性和有序性,避免了线程缓存造成的数据不一致。 在这个实例中,我们...

    Java编写线程动画

    - **线程同步**:为了避免多线程环境下数据的不一致性,Java提供了synchronized关键字、wait()、notify()等机制进行线程同步。 2. **线程动画原理** - **事件驱动模型**:GUI应用通常基于事件驱动模型,用户操作...

    java 多线程

    #### 七、Java线程运行机制 Java虚拟机(JVM)通过线程执行程序代码。每个线程都有自己的程序计数器和方法调用栈。 - **程序计数器**:指示当前线程正在执行的方法中的下一条字节码指令。 - **方法调用栈**:...

    java单线程多线程clientserver

    4. wait(), notify(), notifyAll()方法:在线程间进行协作,但必须在同步块或方法中使用。 5. Condition接口:允许更细粒度的线程控制。 此外,Java并发库(java.util.concurrent)提供了一些高级工具,如...

Global site tag (gtag.js) - Google Analytics