今天被下面两个小程序纠结了大半天,终于在刚刚的某个时刻想明白是怎么回事了, 问题主要是线程的流程没有理解清楚,现在将线程的创建与执行顺序清理一遍
线程的创建:
1,线程:线程的创建继承Thread class ThreadDemo extends Thread{ }
2,重写 public void run(){ }的方法
3,在数函数中实例化线程类 ,再用实例化的类来启动线程
ThreadDemo 类名称 extends Thread // 从Thread类扩展出子类 { 属性 方法… 修饰符 run(){ // 复写Thread类里的run()方法 以线程处理的程序; } }
线程的执行顺序;
1,主函数启动线程
2, start()启动run方法
创建一个线程类,统计现在的名字和使用的是第几个线程 :
package com.com; //创建线程的主函数 public class ThreadDemo2 { //将统计线程个数的类实例化 Count count = new Count(); public static void main(String args[]){ //创建启动线程的 ThreadRun t1 = new ThreadRun(); ThreadRun t2 = new ThreadRun(); //设置线程的名字 t1.setName("t1"); t2.setName("t2"); //启动线程 t1.start(); t2.start(); } } //创建线程THreadRun的类和方法 class ThreadRun extends Thread{ public void run(){ //Thread.currentThread是获取当前线程 Count.add(Thread.currentThread().getName()); } } //创建统计线程个数的类 class Count{ //定义当前线程 private static int num = 0; public String name; public static void add(String name){ num++; try{ System.out.println(name+",您是第"+num+"个使用Count的线程!"); Thread.sleep(1); }catch(Exception e){ e.printStackTrace(); } } }
运行结果: t1,您是第1个使用Count的线程! t2,您是第2个使用Count的线程!
分析执行 :
1,创建Count类中的方法
2,主函数创建线程,
3,设置线程的名字
4,通知run方法准备启动线程
5,在run方法中获得的名字传给add()方法
6,执行一个num++
7,打印出当前线程的名字和第几个线程
//创建线程类给a赋值:
package com.com; /** * 测试线程 * * @author Administrator * */ public class ThreadDemo { public static void main(String args[]) { //创建线程对象 RunThread thread = new RunThread(); //RunThread threadrun = new RunThread(); //启动线程 thread.start(); //threadrun.start(); } } // 定义内部类 class RunThread extends Thread { int a = 100; //定义m1的方法 public void m1(){ a = 1000; try { Thread.sleep(2000); System.out.println("a m1 ="+a ); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //定义M2的方法 public void m2(){ a = 2000; try { Thread.sleep(2000); System.out.println("a m2 ="+a ); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //线程的run方法 public void run() { while (true) { m1(); m2(); try { Thread.sleep(1000); System.out.println("a run ="+a ); } catch (Exception e) { e.printStackTrace(); } } } }
运行结果: a m1 =1000 a m2 =2000 a run =2000
分析执行: 主函数中创建线程对象,启动线程,先执行完run中的们m1方法---->再执行m2()方法--->再打印出try-catch中a的值
相关推荐
"Java实现指定线程执行顺序的三种方式" Java语言中实现指定线程执行顺序是多线程编程中一个非常重要的概念。在多线程编程中,我们经常需要让不同的线程按照一定的顺序执行,以避免线程之间的相互干扰和数据不一致的...
多线程有很好的并发性即无序性,在某些特殊情况下需要用到多线程然而又要使其具备顺序性,这种时候就有了一个特殊的场景那就是多线程顺序执行,在现在VS2015中Task自带了顺序执行的方法,但在此之前的旧项目中如果...
改变线程执行顺序通常不是多线程编程的主要目标,因为在并发环境中,线程的调度是由操作系统内核的调度器来管理的,程序层面无法直接控制。但有时候,程序逻辑需要确保某些任务在其他任务完成后才能执行,这时可以...
join()是Thread的方法,作用是调用线程需等待该join()线程执行完成后,才能继续使用下运行。应用场景:当一个线程必须等待另一个线程执行完毕才能执行时可以使用join方法。 在上面的示例代码中,我们可以看到thread...
本测试主要关注`synchronized`关键字的使用,以及它如何影响线程同步和线程执行顺序。 `synchronized`关键字是Java中用于实现线程同步的关键机制,它确保同一时间只有一个线程可以执行特定的代码块或方法。当一个...
通过这种方式,`join()`方法提供了对线程执行顺序的控制,使得多线程编程更加可控。在实际应用中,根据需求,我们可能需要对多个线程进行`join()`,以确保特定的执行顺序,或者确保某个线程的任务完成后才能进行其他...
这将涉及到线程同步、线程通信以及线程执行顺序控制。 首先,我们需要理解线程的基本概念。线程是操作系统分配CPU时间片的基本单位,一个进程中可以包含一个或多个线程。在Java等支持多线程的编程语言中,我们可以...
但需要注意,线程调度器如何处理优先级并不确定,不应依赖于优先级来保证线程执行顺序。 - **线程池**:为了更有效地管理线程,可以使用`ExecutorService`和`ThreadPoolExecutor`来创建线程池。线程池可以减少创建...
`Thread.Join`使得调用线程等待指定线程完成后再继续执行,这在需要确保线程执行顺序的场景中非常有用。`Join`方法可以设置超时,如果线程在超时前结束,`Join`会返回`True`,否则返回`False`。 除了`Thread.Join`...
这在需要控制线程执行顺序、避免资源竞争或处理紧急任务时非常有用。在易语言中,可以使用相关的API函数或者内置的线程控制命令来实现线程挂起。例如,可能需要使用“挂起线程”命令来暂停特定线程的执行,确保系统...
Java线程中的`join()`方法是一个非常...总的来说,`join()`方法是Java线程编程中控制线程执行顺序的重要手段,通过它能够实现线程间的协调与同步,确保特定线程的执行顺序,防止数据竞争,提高程序的可控性和稳定性。
综上所述,多线程并行执行是提升程序性能的重要手段,而`CountDownLatch`和线程安全的数据结构则为在多线程环境中控制执行顺序和保证数据一致性提供了有力支持。理解并熟练运用这些工具和技术,对于开发高效、可靠的...
同步则是控制线程执行顺序和协调的方式。C#提供了多种同步机制,如`Monitor`、`Semaphore`和`Mutex`等。其中,`Monitor`使用了.NET框架的锁对象,可以锁定特定代码块,保证同一时间只有一个线程执行。例如,`Monitor...
- `join()`方法让调用的线程等待目标线程执行完毕后再继续执行。 2. **`synchronized`关键字**: - `synchronized`用于实现线程同步,防止数据的不一致性。它可以修饰方法或代码块,当一个线程进入同步块/方法后...
通过观察赛马的“行进”(即线程执行)情况,我们可以观察到优先级是如何影响线程执行顺序的。 在Java等支持线程的语言中,线程优先级一般有预定义的几个等级,例如Java中的`Thread.NORM_PRIORITY`(默认优先级)、...
#### 一、多线程执行顺序的基本概念 在多线程编程中,由于多个线程共享同一进程空间,因此它们的执行顺序往往是不确定的。这主要是因为操作系统内核负责线程调度,它会根据各种因素(如优先级、时间片等)决定哪个...
5. 线程同步:当需要控制线程执行顺序或确保共享资源安全时,使用同步机制,如事件对象、互斥量(Mutex)、信号量等。 6. 线程结束:线程执行完毕后,通过调用`ExitThread`或在完成任务后自然退出。 在Windows ...