热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

好记性不如烂笔头73-多线程-继承thread实现简单多线程

通过继承classThread或实现Runnable接口,我们都可以实现多线程。Thread中有两个最重要的函数run()和start()。run()函数必须进行覆写,把要在多个线程中并行处理的代

通过继承class Thread或实现Runnable接口,我们都可以实现多线程。Thread中有两个最重要的函数run()和start()。
run()函数必须进行覆写,把要在多个线程中并行处理的代码放到这个函数中。
虽然run()函数实现了多个线程的并行处理,但我们不能直接调用run()函数,而是通过调用start()函数来启动多线程。
在调用start()的时候,start()函数会首先进行与多线程相关的初始化,然后start()函数会自己调用run()函数。
如果开发者自己直接调用了run()方法,那么这个将作为一个普通的串行程序进行执行,而不是基于多线程运转。


简单多线程的实现的java源代码

package com.thread;

/**
* 一个简单的JAVA多线程
*
* @author 范芳铭
*/

public class EasyThread extends Thread {
int i = 0, j = 0,k=0;
int flag = 0;

public void run() {
//让系统运行6次,为了能观察结果即可
for(int count = 0 ; count <6 ; count ++){
try {
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
if (flag == 0) {
i++;
System.out.println("i=" + i);
} else if (flag == 1){
j++;
System.out.println("B分割点:j=" + j);
}
else {
k++;
System.out.println("C分割点:k=" + k);
}
}
}

public static void main(String[] args) {
EasyThread thread1 = new EasyThread();
thread1.flag = 0;
//不要直接调用run方法,否则会当成普通的串行线程处理
//thread1.run();
thread1.start();

EasyThread thread2 = new EasyThread();
thread2.flag = 1;
thread2.start();

EasyThread thread3 = new EasyThread();
thread3.flag = 2;
thread3.start();
}
}

运行结果
B分割点:j=1
i=1
C分割点:k=1
B分割点:j=2
C分割点:k=2
i=2
B分割点:j=3
i=3
C分割点:k=3
B分割点:j=4
C分割点:k=4
i=4
B分割点:j=5
C分割点:k=5
i=5
C分割点:k=6
B分割点:j=6
i=6

如果我们把直接调用run方法,例如下面这样处理下。
thread1.run();
//thread1.start();

运行结果
i=1
i=2
i=3
i=4
i=5
i=6
B分割点:j=1
C分割点:k=1
B分割点:j=2
C分割点:k=2
C分割点:k=3
B分割点:j=3
B分割点:j=4
C分割点:k=4
B分割点:j=5
C分割点:k=5
B分割点:j=6
C分割点:k=6

很明显,第一个i相关的线程,是作为普通的方法进行调用的,后面两个,才是以多线程的方式运作。


推荐阅读
  • 本文探讨了在Java多线程环境下,如何确保具有相同key值的线程能够互斥执行并按顺序输出结果。通过优化代码结构和使用线程安全的数据结构,我们解决了线程同步问题,并实现了预期的并发行为。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • andr ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • Java 中 Writer flush()方法,示例 ... [详细]
  • 本文介绍了如何使用 Spring Boot DevTools 实现应用程序在开发过程中自动重启。这一特性显著提高了开发效率,特别是在集成开发环境(IDE)中工作时,能够提供快速的反馈循环。默认情况下,DevTools 会监控类路径上的文件变化,并根据需要触发应用重启。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • Java 类成员初始化顺序与数组创建
    本文探讨了Java中类成员的初始化顺序、静态引入、可变参数以及finalize方法的应用。通过具体的代码示例,详细解释了这些概念及其在实际编程中的使用。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
author-avatar
活跃的爱味儿县_454
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有