java-多个多线程类按顺序执行

问题描述

多个多线程类按顺序执行

第一次玩多线程,看代码。
public class Test {
public static void doSomthing(){
System.out.println("11111111111");
}

public static void main(String[] args) {

    System.out.println("调用线程1方法...");
    TestThread1 testThread1 = new TestThread1();
    testThread1.doSomething();

    System.out.println("调用线程2方法...");
    TestThread2 testThread2 = new TestThread2();
    testThread2.doSomething();

    System.out.println("其他方法.....");
    doSomthing();
}

}
需求是:main里面的3个方法,要按顺序执行。

public class TestThread1 implements Runnable{

public void doSomething(){
    ThreadPool pool = new ThreadPool();
    for (int i = 0; i < 10; i++) {
        pool.addThread(new TestThread1());
    }
    pool.shutdonw();
}

public void run() {
    System.out.println("这是线程1...");
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

}
TestThread1 和 TestThread2 是一样的。

public class ThreadPool {
private Integer POOL_SIZE = 2;
private ExecutorService pool = Executors.newFixedThreadPool(POOL_SIZE);
private ThreadCallback callback = null;
private ThreadMonitor monitor = null;

public ThreadPool() {
}

public synchronized void addThread(Runnable thread) {
    pool.execute(thread);
}

public synchronized void setCallback(ThreadCallback callback) {
    if (monitor == null) {
        this.callback = callback;
        monitor = new ThreadMonitor(pool, callback);
        Thread thread = new Thread(monitor);
        thread.start();
    }
}

public synchronized void shutdonw() {
    pool.shutdown();
}

public synchronized boolean isTerminated() {
    return pool.isTerminated();
}

}
ThreadPool是别人写的,
求大神啊!~~

需求是:main里面的3个方法,要按顺序执行。
就是
testThread1.doSomething();
完成后执行testThread2.doSomething();
完成后执行doSomthing();

解决方案

http://m.blog.csdn.net/blog/lolashe/20798549

解决方案二:

需要自己做线程同步 这样才可以控制线程执行顺序

时间: 2024-09-11 13:22:23

java-多个多线程类按顺序执行的相关文章

java代码-java初学者提问 在类中 用static成员变量实例化自身类 程序的执行顺序过程是怎样的?

问题描述 java初学者提问 在类中 用static成员变量实例化自身类 程序的执行顺序过程是怎样的? class Demo03 { public static void main(String[] args) { A.show(); } } class A { //构造方法 A(){ System.out.println("构造方法执行"); System.out.println(b); System.out.println(c); } static A a=new A(); sta

关于java类初始化顺序的问题

问题描述 关于java类初始化顺序的问题 正常来说一个类的初始化过程应该是: 1.全局静态变量 2.静态代码块 3.全局变量 4.代码块 5.构造器 有这么一个例子: public class LoadTest { //全局静态变量 static int staticI = 10; //全局变量 int i = 20; //构造器 private LoadTest() { System.out.println("staticI="+staticI); System.out.printl

有关多线程顺序执行的问题

问题描述 现有如下代码publicImageUtils(finalStringurl,finalintmaxWidth,finalintmaxHeight,finalintpageNo,finalStringuserID,finalStringtopic){super(newBorderLayout());System.out.println("url="+url);JPanelwebBrowserPanel=newJPanel(newBorderLayout());finalJWeb

Java 5.0多线程编程实践

Java5增加了新的类库并发集java.util.concurrent,该类库为并发程序提供 了丰富的API多线程编程在Java 5中更加容易,灵活.本文通过一个网络服务器 模型,来实践Java5的多线程编程,该模型中使用了Java5中的线程池,阻塞队列 ,可重入锁等,还实践了Callable, Future等接口,并使用了Java 5的另外一 个新特性泛型. 简介 本文将实现一个网络服务器模型,一旦有客户端连接到该服务器,则启动一 个新线程为该连接服务,服务内容为往客户端输送一些字符信息.一个

控制-关于java的一个多线程问题,为什么输出的不是一次tom一次李四,是不是在输入判断0,1那里有问题?

问题描述 关于java的一个多线程问题,为什么输出的不是一次tom一次李四,是不是在输入判断0,1那里有问题? class Producer//这个是单生产线,单消费问题,一个单生产线有多条路径的问题(最后的效果的输入输出线程轮流执行) { public static void main(String[] args) { //创建资源 Resource res=new Resource(); //创建线程 input in=new input(res); output out=new outpu

Java虚拟机JVM内存分区及代码执行机制

1.  JVM体系结构   图1 JVM体系结构        方法区:存放JVM加载的类型信息.包括: 类型基本信息,常量池,字段信息,方法信息,类变量,指向ClassLoader的引用,Class类的引用,方法表等. (对应JVM内存配置中的-PermSize等)    java堆:程序中创建的类的实例和数组,包括class对象和exception对象,存放在堆里面.堆中除了存储对象的实例数据外,还要存储该对象指向方法区中类型信息的指针. (JVM中所有的线程共享堆空间,对应JVM内存配置中

java线程-java中的多线程?线程的并发问题

问题描述 java中的多线程?线程的并发问题 多线程具体代表java中程序的什么?它指的实际功能上的什么情况?详细求解 解决方案 多线程和进程的关系详解: 1.当我们运行QQ程序时,操作系统就会为这个程序创建一个QQ进程(QQ~PCB)并且分配CPU.内存等资源. 2.但这个进程中包含着:发送大型的线程.接受文件的线程.发送文字信息的线程.发送文字信息的线程等多个不同功能的线程. 因而我们才能一边发送文件,一边发送文字信息同时操作.这些线程都共享着QQ进程中的CPU.内存等资源. 总结:所以说进

深入理解Java内存模型(三)——顺序一致性

数据竞争与顺序一致性保证 当程序未正确同步时,就会存在数据竞争.java内存模型规范对数据竞争的定义如下: 在一个线程中写一个变量, 在另一个线程读同一个变量, 而且写和读没有通过同步来排序. 当代码中包含数据竞争时,程序的执行往往产生违反直觉的结果(前一章的示例正是如此).如果一个多线程程序能正确同步,这个程序将是一个没有数据竞争的程序. JMM对正确同步的多线程程序的内存一致性做了如下保证: 如果程序是正确同步的,程序的执行将具有顺序一致性(sequentially consistent)–

Objective-C的NSOperation多线程类基本使用指南_IOS

NSOperation 一.NSOperation1.简介 NSOperation实例封装了需要执行的操作和执行操作所需的数据,并且能够以并发或非并发的方式执行这个操作. NSOperation本身是抽象基类,因此必须使用它的子类,使用NSOperation子类的方式有2种: 1> Foundation框架提供了两个具体子类直接供我们使用:NSInvocationOperation和NSBlockOperation 2> 自定义子类继承NSOperation,实现内部相应的方法 2.执行操作