`

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  
写的什么鬼

相关推荐

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

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

    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学习多线程处理

    同一个进程中的多个线程之间可以并发执行。 线程的调度管理是由进程来完成的。 注意:编程时,必须确保线程不会妨碍同一进程的其他线程 线程的分类:系统级线程(又称为核心级线程,负责管理调度不同进程之间的多...

    java 两个线程相互顺序输出

    NULL 博文链接:https://lfl2011.iteye.com/blog/1701252

    多线程任务控制实例代码

    主要实现了,多个线程任务在同时执行的情况下,保证线程任务顺序的问题。更通俗来说,就是保证Thread1一定在thread2,thread3之后才能执行。另外,代码里我写了详细的注释,和测试的效果,绝对让你能看懂。还有我传的...

    线程+监听技术 简单的例子 和详细讲解

    线程按顺序执行,即在一个线程中,一个时刻只能由一个执行点。显然,按传统方法设计的程序,无论是单道执行的程序,还是由多个进程并发执行的多道程序,就每个程序本身而言,都是由单线程组成的。

    Java线程详解.ppt

    一个进程中可以包含一个或多个线程,一个线程就是程序内部的一条执行线索。 在单线程中,程序代码按调用顺序依次往下执行,不能实现两段程序代码同时交替运行的效果。如果一个程序中要实现两段程序代码同时交替运行...

    4种常用Java线程锁的特点,性能比较、使用场景.pdf

    一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel ...

    Android-SmartQueue:基于优先级队列写的一个SmartQueue(可控制多个线程的顺序执行、View的顺序显示),利用它可以轻松实现RecyclerView、ListView等Item的进入动画,网络请求线程的顺序执行

    ##多个线程顺序执行 你可以创建一个ThreadPriorityQueue对象,然后通过.run()方法让线程开始执行,创建ThreadPriorityQueue对象的时候,你可以通过addThread()方法添加线程,其中第一个参数是Thread对象,第二个参数...

    java多线程设计模式详解(PDF及源码)

    去睡觉吧 第11章 Thread-Specific Storage——每个线程的保管箱 第12章 Active Object——接受异步消息的主动对象 总结 多线程程序设计的模式语言 附录A 练习问题的解答 附录B Java的内存模型 附录C Java线程的...

    java多线程编程大总结

    java多线程编程大总结:Java 线程是 Java 语言中一个非常重要的部分,Java5 之前,多线程的语言支持还是比较弱的, 内容也较少,写一个复杂的多线程程序是相当有挑战性的。 在Java5 以后,Java 对多线程做了很多...

    多线程面试相关知识点

    一个程序实现多个代码同时交替运行就需要产生多个线程 CPU随机的抽出时间,让我们的程序一会做这件事情,一会做另外一件事情 同其他大多数编程语言不同,Java内置支持多线程编程(multithreaded programming)...

    Java程序设计案例教程-第8章-多线程编程.pptx

    但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程的执行控制。 一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。 第8页 Java程序设计案例教程-第8章-多线程编程...

    java多线程、通信机制、Thread类以及Runnable接口间的使用实例

    1. 写两个线程,一个线程打印1-52,另一个线程打印字母A-Z。打印顺序为12A34B56C……5152Z。 学习线程之间的通信协调关系。 2. 使用 runnable 接口实现按两个不同的时间间隔( 1 秒和 3 秒)在屏幕上显示当前时间。...

    Java线程详解(线程概念、代码示例、周期解析等)

    但与进程不同的是,同类的多个线程是共享一块内存空间和一组系统资源,而线程本身的数据通常只有微处理器的寄存器数据,以及一个供程序执行时使用的堆栈。所以系统在产生一个线程,或者在各个线程之间切换时,负担要...

    java多线程

    多线程由一个或者多个线程组成的程序就是多线程,Java中,一定是从主线程开始执行(main方法),然后在主线程的某个位置启动新的线程。二、线程的基本操作2.1 创建创建线程的两种方法1、继承java.lang.Thread上述...

    Java 多线程的创建方式

    Java语言内置了多线程支持,当Java程序启动的时候,实际上是启动了一个JVM进程,然后JVM启动主线程来执行 main()方法,在main()方法中我们可以又启动其他线程,每个线程的任务就是执行一段顺序执行的代码,Java使用...

    Java的线程安全内存模型.docx

    当 多个线程 同时共享同一个 全局变量 做 写 的操作时候,可能会受到其他线程的干扰,导致数据 脏读 。(数据一致性问题) 如何解决线程安全问题? 核心思想:在同一时刻,只能有一个线程执行。 通过加锁...

    java代码-3线程输出26个英文

    java代码-3线程输出26个英文

Global site tag (gtag.js) - Google Analytics