`
雨过天晴0521
  • 浏览: 155472 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

如何跟踪多线程的执行顺序

 
阅读更多
如果想跟踪多个线程修改某个值的顺序,可以

1.为每个线程命名,也可以使用默认名
2.将线程名+变量值一起输出
3.让主线程等待其他线程结束

/**
 * Created by IntelliJ IDEA.
 * User: Michael
 * Date: 9/21/11
 * Time: 6:28 PM
 * To change this template use File | Settings | File Templates.
 */
public class Machine extends Thread{

    private static StringBuffer log = new StringBuffer();
    private static int count = 0;
    private int a = 0;

    public void run(){
        for(int i=0; i<20; i++){
            a++;
            log.append(currentThread().getName()+":a="+a+" ");
            if(++count %10==0)
                log.append("\n");
        }
    }

    public static void main(String args[])throws Exception{
        Machine machine1 = new Machine();
        Machine machine2 = new Machine();
        machine1.setName("t1");
        machine2.setName("t2");
        machine1.start();
        machine2.start();
        while(machine1.isAlive()||machine2.isAlive())
            Thread.sleep(500);
        System.out.println(log);
    }
}


输出结果:


t1:a=1 t1:a=2 t1:a=3 t1:a=4 t1:a=5 t2:a=1 t1:a=6 t2:a=2 t2:a=3 t2:a=4 
t2:a=5 t2:a=6 t2:a=7 t1:a=7 t2:a=8 t1:a=8 t1:a=9 t2:a=9 t1:a=10 t2:a=10 
t1:a=11 t1:a=12 t2:a=11 t1:a=13 t1:a=14 t2:a=12 t1:a=15 t1:a=16 t2:a=13 t1:a=17 
t2:a=14 t1:a=18 t2:a=15 t1:a=19 t1:a=20 t2:a=16 t2:a=17 t2:a=18 t2:a=19 t2:a=20 



如果想改变执行顺序, 可以为线程设定优先级, java提供了10个优先级,但不能与所有操作系统都能映射. Windows 2000有7个优先级, 并且不固定, Sun的Solaris有2的32次方个优先级.如果希望很好的移植, 就要是用MAX_PRIORITY, NORM_PRIORITY, MIN_PRIORITY这三个优先级.
分享到:
评论

相关推荐

    C# 不使用Task实现的多线程顺序执行

    多线程有很好的并发性即无序性,在某些特殊情况下需要用到多线程然而又要使其具备顺序性,这种时候就有了一个特殊的场景那就是多线程顺序执行,在现在VS2015中Task自带了顺序执行的方法,但在此之前的旧项目中如果...

    Qt 多线程及简单实例 demo

    1.多线程的执行顺序无法保证,与操作系统的调度策略和线程优先级等因素有关。 2.多线程的切换可能发生在任何时刻、任何地点。 3.多线程对代码的敏感度高,因此对代码的细微修改都可能产生意想不到的效果。 先由一...

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

    java多线程按需交替执行,java新特性。

    多线程面试相关知识点

    多线程则指的是在单个程序中可以同时运行多个不同的线程执行不同的任务. 说明: 线程是程序内的顺序控制流,只能使用分配给程序的资源和环境。 多线程编程的目的,就是"最大限度地利用CPU资源",当某一线程的...

    Java多线程编程指南

    一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。 这里定义和线程相关的另一个术语 - 进程...

    多线程任务控制实例代码

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

    多线程写法(精易模块线程池和鱼刺模块线程池)

    源码演示了多线程写法,主要是对比精易模块线程池,鱼刺模块线程池。@在人间。

    C#多线程源码

    在单CPU系统的一个单位时间(time slice)内,CPU只能运行单个线程,运行...而多线程只是系统带来的一个假像,它在多个单位时间内进行多个线程的切换。因为切换频密而且单位时间非常短暂,所以多线程可被视作同时运行。

    易语言多线程许可证基本例程

    易语言多线程许可证基本例程源码,多线程许可证基本例程,子程序1

    semaphore控制多线程循序执行

    semaphore控制多线程循序执行,网上 找的例子更改的希望对大家有用

    VB.net多线程编程.pdf

    按顺序执行。尽管由于多个事务多多少少地同时运行使多线程应用程序效率更 高,但是使用先前版本的Visual Basic很难建立这类程序。 多线程程序是可行的,因为操作系统是多任务的,它有模拟同一-时刻运行多 个应用程序...

    110104010104.rar_MFC多任务_MFC多线程挂起_mfc 多线程_mfc 生产者

    线程是程序独立运行的基本单位,一个程序通过执行多个线程可以提高机器本身资源的利用率,同时也可以完成多任务并行运行的操作,多线程可以实现并行处理,避免了某项任务长时间占用CPU时间。 互斥体 互斥体与临界区...

    SerialPortHelper 多线程串口通讯

    在开发串口通讯的时候一直用的微软的,顺序执行,后来找到一个可以用多线程的帮组类,共享给大家,本人测试过xmodel都可以使用 ,调试也很方便,

    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... 一个线程可以理解为一个人,打印...

    一个JavaScript多线程函数库

    一般就JS来说,它同时只能执行一个函数,一个一个按顺序去执行,本多线程库就解决了此问题,可以同时去执行多个JS函数。

    VC 多线程优先级自定义实例.rar

    VC 用进度条表示多线程优先级执行问题,程序将演示各个线程执行的优先级,当然这是在程序中设置好的,程序将按照设定运行各个线程,当然,优先级不一样,将按以下顺序启动线程:关键时间最先执行,最高其次,然后...

    浅谈Python3多线程之间的执行顺序问题

    一个多线程的题:定义三个线程ID分别为ABC,每个线程打印10遍自己的线程ID,按ABCABC……的顺序进行打印输出。 我的解法: from threading import Thread, Lock # 由_acquire解锁执行后释放_release锁 def _print(_...

    解决任意的多线程并行、串行、阻塞、依赖、回调的并行框架

    解决任意的多线程并行、串行、阻塞、依赖、回调的并行框架,可以任意组合各线程的执行顺序,带全链路执行结果回调。多线程编排一站式解决方案。来自于京东主App后台。

    CVI对多线程的如何支持

    线程技术是指开发架构将应用程序的一部分分离为“线程”,使线程与...线程是一种特殊的对象,是操作系统执行多任务的一部分,它允许应用程序的一部分独立于其他对象而单独运行,因此也就脱离了应用程序的常规执行顺序。

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

    主要介绍了java多线程如何按指定顺序同步执行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics