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
分享到:
相关推荐
java10个线程按照顺序打印1-100
java多线程每个线程挨着打印ABC的4种实现方式,有4个线程t1、t2、t3、t4,t1打印A后t2打印A再t3打印A再t4打印A,然后从新回到t1打印B再t2打印B...t4打印B... 4个线程轮流打印abc... 一个线程可以理解为一个人,打印...
一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。 这里定义和线程相关的另一个术语 - 进程...
同一个进程中的多个线程之间可以并发执行。 线程的调度管理是由进程来完成的。 注意:编程时,必须确保线程不会妨碍同一进程的其他线程 线程的分类:系统级线程(又称为核心级线程,负责管理调度不同进程之间的多...
NULL 博文链接:https://lfl2011.iteye.com/blog/1701252
主要实现了,多个线程任务在同时执行的情况下,保证线程任务顺序的问题。更通俗来说,就是保证Thread1一定在thread2,thread3之后才能执行。另外,代码里我写了详细的注释,和测试的效果,绝对让你能看懂。还有我传的...
线程按顺序执行,即在一个线程中,一个时刻只能由一个执行点。显然,按传统方法设计的程序,无论是单道执行的程序,还是由多个进程并发执行的多道程序,就每个程序本身而言,都是由单线程组成的。
一个进程中可以包含一个或多个线程,一个线程就是程序内部的一条执行线索。 在单线程中,程序代码按调用顺序依次往下执行,不能实现两段程序代码同时交替运行的效果。如果一个程序中要实现两段程序代码同时交替运行...
一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel ...
##多个线程顺序执行 你可以创建一个ThreadPriorityQueue对象,然后通过.run()方法让线程开始执行,创建ThreadPriorityQueue对象的时候,你可以通过addThread()方法添加线程,其中第一个参数是Thread对象,第二个参数...
去睡觉吧 第11章 Thread-Specific Storage——每个线程的保管箱 第12章 Active Object——接受异步消息的主动对象 总结 多线程程序设计的模式语言 附录A 练习问题的解答 附录B Java的内存模型 附录C Java线程的...
java多线程编程大总结:Java 线程是 Java 语言中一个非常重要的部分,Java5 之前,多线程的语言支持还是比较弱的, 内容也较少,写一个复杂的多线程程序是相当有挑战性的。 在Java5 以后,Java 对多线程做了很多...
一个程序实现多个代码同时交替运行就需要产生多个线程 CPU随机的抽出时间,让我们的程序一会做这件事情,一会做另外一件事情 同其他大多数编程语言不同,Java内置支持多线程编程(multithreaded programming)...
但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程的执行控制。 一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。 第8页 Java程序设计案例教程-第8章-多线程编程...
1. 写两个线程,一个线程打印1-52,另一个线程打印字母A-Z。打印顺序为12A34B56C……5152Z。 学习线程之间的通信协调关系。 2. 使用 runnable 接口实现按两个不同的时间间隔( 1 秒和 3 秒)在屏幕上显示当前时间。...
但与进程不同的是,同类的多个线程是共享一块内存空间和一组系统资源,而线程本身的数据通常只有微处理器的寄存器数据,以及一个供程序执行时使用的堆栈。所以系统在产生一个线程,或者在各个线程之间切换时,负担要...
多线程由一个或者多个线程组成的程序就是多线程,Java中,一定是从主线程开始执行(main方法),然后在主线程的某个位置启动新的线程。二、线程的基本操作2.1 创建创建线程的两种方法1、继承java.lang.Thread上述...
Java语言内置了多线程支持,当Java程序启动的时候,实际上是启动了一个JVM进程,然后JVM启动主线程来执行 main()方法,在main()方法中我们可以又启动其他线程,每个线程的任务就是执行一段顺序执行的代码,Java使用...
当 多个线程 同时共享同一个 全局变量 做 写 的操作时候,可能会受到其他线程的干扰,导致数据 脏读 。(数据一致性问题) 如何解决线程安全问题? 核心思想:在同一时刻,只能有一个线程执行。 通过加锁...
java代码-3线程输出26个英文