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

java多线程。编写10个线程,第一个线程从1加到10,第二个线程第11加到20,。。。第10个线程从91加到100.最够把10个线程结果相加

java基础教材中多线程一章我觉得难的一个问题。首先要用多线程实现。因此要有类继承Thread或者实现Runable。由于每个线程的操作数不一样我生成了十个不同对象的线程。publ

java 基础教材中多线程一章 我觉得 难 的一个问题。
首先 要用多线程实现 。 因此要有类继承 Thread 或者 实现 Runable。

由于 每个线程 的 操作数 不一样 我生成了十个不同对象的线程。

public class HomeWork6_4_1 {

public static void main(String[] args) throws InterruptedException {
for(int i=0; i<10; i++) {
Add add = new Add(i*10+1, i*10+10);
add.start();
}
Thread.sleep(100); // 休眠 一会 以便 其他线程执行完 不然 主线程执行到输出语句时 其他线程可能还未执行完毕
System.out.println(Add.sub);
}
}
class Add extends Thread{

static Object object = new Object(); // 同步代码块锁

static int sub; // 类属性 用于保存线程相加结果

private int min; // 传过来数据的 最小值
private int max; // 最大值

public Add(int min, int max) {
this.min = min; // 对象属性赋值
this.max = max; // 对象属性赋值
}
public void run() {
int res = 0;
for(int i=min; i<=max; i++) {
res += i; // 执行 从 min 加到 max
}

// 同步代码块 同一时刻只有一个 线程可以 调用该代码块内内容
synchronized (object) {
System.out.println(Thread.currentThread().getName() + "正在将结果附上" + res);
sub += res;
}
}

}

当然 使用 Thread.sleep(100)这样的方式 只是让main线程 休眠一会 并不能真正保证 其他线程 执行 完毕 可以 使用 .join()插队

public class HomeWork6_4_1 {

public static void main(String[] args) throws InterruptedException {
for(int i=0; i<10; i++) {
Add add = new Add(i*10+1, i*10+10);
add.start();
add.join();

}
System.out.println(Add.sub);
}
}
class Add extends Thread{

static int sub; // 类属性 用于保存线程相加结果

private int min; // 传过来数据的 最小值
private int max; // 最大值

// 注 如果设置 同步方法的 话 一定 要 设置成静态方法 因为 生成了十个 不同的 对象 使用对象方法的话 锁是该对象 每个都 不一样的 也就没用了
// 静态方法的 锁是 该类
synchronized static void addres(int num) {
System.out.println(Thread.currentThread().getName() + "正在将结果附上" + num);
sub += num;
}

public Add(int min, int max) {
this.min = min; // 对象属性赋值
this.max = max; // 对象属性赋值
}
public void run() {
int res = 0;
for(int i=min; i<=max; i++) {
res += i; // 执行 从 min 加到 max
}

addres(res); // 调用同步方法

}

}

每个线程 都插队 也就是 所有其他线程执行完 main 线程 才能够执行
该作业考量 的 也许有 线程执行顺序 。。。 即可以通过设置线程的优先级 main的优先级是 5 大概 可以将 生成的对象线程优先级 设置成 10 这样根据系统不同不一定有效

通用方法 就是 .join() 了


推荐阅读
  • 本文探讨了在Java多线程环境下,如何确保具有相同key值的线程能够互斥执行并按顺序输出结果。通过优化代码结构和使用线程安全的数据结构,我们解决了线程同步问题,并实现了预期的并发行为。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 本文提供了使用Java实现Bellman-Ford算法解决POJ 3259问题的代码示例,详细解释了如何通过该算法检测负权环来判断时间旅行的可能性。 ... [详细]
  • 在多线程编程环境中,线程之间共享全局变量可能导致数据竞争和不一致性。为了解决这一问题,Linux提供了线程局部存储(TLS),使每个线程可以拥有独立的变量副本,确保线程间的数据隔离与安全。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 本文探讨了在Java中实现系统托盘最小化的两种方法:使用SWT库和JDK6自带的功能。通过这两种方式,开发者可以创建跨平台的应用程序,使窗口能够最小化到系统托盘,并提供丰富的交互功能。 ... [详细]
  • 本文总结了Java程序设计第一周的学习内容,涵盖语言基础、编译解释过程及基本数据类型等核心知识点。 ... [详细]
  • 在Java中,this是一个引用当前对象的关键字。如何通过this获取并显示其所指向的对象的属性和方法?本文详细解释了this的用法及其背后的原理。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • Java编程实践:深入理解方法重载
    本文介绍了Java中方法重载的概念及其应用。通过多个示例,详细讲解了如何在同一类中定义具有相同名称但不同参数列表的方法,以实现更灵活的功能调用。 ... [详细]
  • 本文详细介绍如何在VSCode中配置自定义代码片段,使其具备与IDEA相似的代码生成快捷键功能。通过具体的Java和HTML代码片段示例,展示配置步骤及效果。 ... [详细]
  • Java第四周作业:条件语句实践与分析
    本次作业主要围绕Java编程中的if语句展开,通过具体案例深入理解选择结构的使用方法。学生需要完成多个编程任务,并在博客中详细记录每道题目的题目、代码及运行结果。 ... [详细]
  • 数组元素逆序排列的实现
    本文介绍了一种简单有效的方法,用于将整数数组中的元素进行逆序排列。通过折半交换对应位置的元素,可以高效地完成这一任务。 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • 不确定性|放入_华为机试题 HJ9提取不重复的整数
    不确定性|放入_华为机试题 HJ9提取不重复的整数 ... [详细]
author-avatar
辣手夏兰荇德_云
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有