`

Java中多个线程按顺序执行

    博客分类:
  • java
阅读更多

 Java中多个线程按顺序执行

基本思想:建立了一个队列,为每一个Thread保存了一个对象锁,保证按顺序执行。线程启动的时候,使随机的,但是执行代码是按顺序的。

import java.util.LinkedList;
import java.util.Queue;


public class ThreadTest {
    private static Queue qThread=new LinkedList();//线程同步对象队列
    public static synchronized void putObject(Object t){
        qThread.offer(t);
    }
    public static synchronized Object getObject(){
        return qThread.poll();
    }
    public static  void waitThread(Object t) throws InterruptedException{
        synchronized(t){
            t.wait();
        }
    }
    public static void notifyThread(){
        Object obj=ThreadTest.getObject();
        synchronized(obj){
            obj.notify();
        }
    }
    public static void main(String[] args) throws InterruptedException {
        int i = 0;
        boolean isFirst=true;
        while (i < 10) {
            Object obj=new Object();
            if(i>0){
                isFirst=false;
                ThreadTest.putObject(obj);
            }
            Thread t2 = new Thread2(isFirst,obj);
            Object obj2=new Object();
            ThreadTest.putObject(obj2);
            Thread t3 = new Thread3(obj2);
            t2.start();
            t3.start();
            i++;
        }
    }
}
/**
 * 线程2
 *
 * @author Harry.WANG
 *
 */
class Thread2 extends Thread {
    private boolean isFirst=false;
    private Object obj;
    public Thread2(boolean f,Object obj){
        this.isFirst=f;
        this.obj=obj;
    }
    @Override
    public void run() {
        if(!this.isFirst){
            System.out.println(this.getName()+"等待...");
            try{
                ThreadTest.waitThread(obj);
            }catch(InterruptedException e){
                e.printStackTrace();
            }
        }
        System.out.println("启动"+this.getName()+"...");
        try {
            sleep(3000);//等待3秒,为了测试
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("停止"+this.getName()+"...");
        ThreadTest.notifyThread();
    }
}

class Thread3 extends Thread {
    private Object obj;
    public Thread3(Object obj){
        this.obj=obj;
    }
    @Override
    public void run() {
            System.out.println(this.getName()+"等待...");
            try{
                ThreadTest.waitThread(obj);
            }catch(InterruptedException e){
                e.printStackTrace();
            }
        System.out.println("启动"+this.getName()+"...");
        try {
            sleep(3000);//等待3秒,为了测试
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("停止"+this.getName()+"...");
        ThreadTest.notifyThread();
    }
}

引用:http://netjavaliu.blog.sohu.com/143449586.html

分享到:
评论
1 楼 Nabulio 2016-12-09  
写的什么鬼

相关推荐

    JAVA线程高级-线程按序交替执行

    在Java编程中,多线程是并发编程的重要组成部分,它允许程序同时执行多个任务,从而提高了系统的效率和响应性。然而,在某些场景下,我们可能需要控制线程的执行顺序,确保它们按照特定的顺序交替运行,这在并发编程...

    java10个线程按照顺序打印1-100

    在上述的10个线程顺序打印1-100的问题中,可能的解决方案包括但不限于创建一个共享的计数器,使用`synchronized`和`wait/notify`,或者使用`Semaphore`,`CyclicBarrier`等并发工具。每个解决方案都需要考虑线程安全...

    让线程按顺序执行8种方法.doc

    在上面的示例代码中,我们可以看到thread1、thread2、thread3三个线程按照顺序执行的顺序是:产品经理规划新需求 -&gt; 开发人员开发新需求功能 -&gt; 测试人员测试新功能。这里使用join()方法来实现线程的顺序执行。 二...

    java 两个线程相互顺序输出

    - 在Java中,线程同步是为了避免多个线程对共享资源的不正确访问,防止数据的不一致性。Java提供了多种同步机制,如`synchronized`关键字、`Lock`接口(如`ReentrantLock`)、`Semaphore`信号量、`CyclicBarrier`...

    java多线程Demo

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...

    多线程并行执行,汇总结果

    多线程并行执行是指在同一个程序中同时运行多个线程,每个线程负责不同的任务,以实现任务的并发执行。这种技术可以充分利用多核处理器的优势,将CPU的计算能力最大化,从而提高程序的运行效率。在Java中,可以通过...

    java单线程多线程clientserver

    通过创建多个线程,程序可以在同一时间执行多个任务,提高了CPU的利用率和程序的响应速度。多线程可以分为并发和并行两种。并发是在单核CPU中,通过快速切换线程执行来实现的“同时”运行;而并行则是在多核CPU中,...

    Java多线程按指定顺序同步执行

    Java多线程按指定顺序同步执行是Java编程中的一种常见问题,即如何让多个线程按照既定的顺序依次执行。下面将介绍三种解决方案,分别使用newSingleThreadExecutor、join方法和ThreadPoolExecutor。 方法1:使用...

    java程序 两个线程实现学生成绩的读写

    Java程序中的多线程技术是实现并发...总的来说,这个Java程序展示了如何在并发环境中处理读写操作,是理解和实践Java多线程的一个好例子。通过学习这个程序,我们可以深入理解Java线程的使用以及并发编程中的核心概念。

    java多线程设计模式_java_设计模式_多线程_多线程课题_

    死锁是多线程编程中的常见问题,两个或多个线程互相等待对方释放资源,导致无法继续执行。Java的jstack工具可以帮助检测死锁,而在编程时应避免循环等待,合理设计锁的获取顺序,以减少死锁的风险。 以上就是Java多...

    java多线程的讲解和实战

    1. **线程的基本概念**:线程是程序执行的最小单位,一个进程中可以有多个线程同时运行。Java通过`Thread`类和`Runnable`接口来创建和管理线程。每个线程都有自己的生命周期,包括新建、就绪、运行、阻塞和结束五个...

    java多线程文件传输

    - **CyclicBarrier**:允许多个线程等待直到达到某个屏障点再一起继续执行。 - **Semaphore**:信号量,控制同时访问特定资源的线程数量。 - **ThreadPoolExecutor**:线程池,管理线程并处理任务队列,能有效...

    多个线程到达后才能执行某个任务,并且只能执行一次

    标题中的“多个线程到达后才能执行某个任务,并且只能执行一次”指的是在多线程环境下,需要确保一个任务在所有等待线程都到达特定条件后才开始执行,并且这个任务在整个程序运行过程中只被执行一次。这通常涉及到...

    java多线程实例 代码可执行 绝对开源

    首先,Java多线程允许程序同时执行多个任务,这通过创建并运行多个线程来实现。在Java中,可以通过继承Thread类或实现Runnable接口来创建线程。继承Thread类可以直接重写run()方法,而实现Runnable接口则需要创建一...

    java多线程每个线程挨着打印ABC的4种实现方式

    java多线程每个线程挨着打印ABC的4种实现方式,有4个线程t1、t2、t3、t4,t1打印A后t2打印A再t3打印A再t4打印A,然后从新回到t1打印B再t2打印B...t4打印B... 4个线程轮流打印abc... 一个线程可以理解为一个人,打印...

    java多线程编程

    在单线程环境中,程序按照顺序执行任务,而在多线程环境中,可以同时执行多个任务,每个任务被称为一个线程。Java通过`Thread`类和`Runnable`接口提供了对多线程的支持。创建线程有两种方式:继承`Thread`类或实现`...

    java中的多线程实例详解(自己去运行看结果)

    Java并发工具类 (`java.util.concurrent` 包) 提供了高级线程管理工具,如`ExecutorService`用于管理和控制线程池,`CountDownLatch`用于同步多个线程,`CyclicBarrier`让一组线程等待其他线程到达屏障点,以及`...

    Java多线程下载网络图片

    1. **同步与互斥**:当多个线程同时访问同一资源(如共享的图片存储位置)时,可能会引发数据不一致的问题。Java提供了多种同步机制,如`synchronized`关键字、`Lock`接口以及`ReentrantLock`等,确保在同一时刻只有...

    semaphore控制多线程循序执行

    例如,如果我们要实现一个打印队列,让多个线程按顺序打印任务,Semaphore就可以用来保证打印任务的顺序执行,防止多个线程同时打印。 以下是如何使用Semaphore的基本步骤: 1. 初始化Semaphore:创建一个...

Global site tag (gtag.js) - Google Analytics