编写多线程程序来几种植实现方式?

博文的标题带有大写的”K:”表示是学习到的知识点的总,带有”Q:”的表示是息息相关知识点的题目及其解答,带有”KandQ:”的代表是知识点的有些麻烦事以及相关题材及其解答。博文尝试用以下的计对文章进行归类,以便让找到知识点的归类总结及查看。目录会趁着文章的翻新而持续的拓跟新,以确保能够在目录处找到文章的及其有关内容。 很喜爱当简书中愚行者(作者谓)的如出一辙句子话:我未能够确保自己形容的每个地方还是指向之,但是起码力保我勾勒的各个句话,每段代码都是自家好深刻梳理与细致斟酌的。一篇篇底篇章背后,是也投机以术提高的道路乃至人生道路上留下的等同步一步之足迹。很欢喜林肯的同等词话–我倒之死缓慢,但是自己没会倒退。我是愚行者,一个纯粹的程序员。

Java
5以前实现多线程有有限种植实现方式:一种植是继往开来Thread类;另一样种是实现Runnable接口。

  • java基础
    1. 并发编程(多线程)
    2. 网编程(Socket)
    3. 非阻塞类(NIO)
    4. JVM相关
    5. 旁基础知识点
      1. 断言
        1. K:java 断言 assert
          初步使用:断言开启、断言使用
      2. 序列化与反序列化
        1. K:java中之序列化和反序列化—基础介绍
        2. K:java中序列化的少种植艺术—Serializable或Externalizable
        3. K:java中之序列化与反序列化—transient关键字之下
        4. Q:java中之序列化与反序列化—serialVersionUID的意
      3. 枚举
        1. K:java中枚举的广泛用法
        2. K:枚举的线程安全性及其序列化问题
        3. Q:记学习枚举过程遭到之一个粗问题
      4. 末节
        1. K:java中properties文件的读写
        2. Q:java中之泛型数组
        3. K:java中的安全模型(沙箱机制)
  • 算法
    1. 递归与分治
    2. 动态规划
    3. 贪算法
    4. 回溯法
    5. 分段限界
    6. 概率算法
    7. NP完全性理论
    8. 近似算法
    9. 算法优化策略
    10. 以线算法设计
    11. 其它
      1. 《算法(第四版)》
        1. Q:算法(第四版)—第一章
      2. 栈相关的科普的算法
        1. K:大数加法
        2. K:括号分隔符匹配问题
        3. K:逆波兰算法
        4. K:双栈法求算术表达式的值
        5. K:汉诺塔问题
      3. 其它
        1. K:求取数组中极其可怜连续子序列以及之季单算法
        2. K:找寻数组吃第n老大之数组元素的老三独算法
        3. K:求取两个数的最大公约数的少数单算法
        4. K:Union-Find(并查集)算法
        5. K:图相关的卓绝小生成树(MST)
      4. 算法杂谈
  • 数据结构
    1. 线性表
      1. K:线性表
      2. K:线性表的落实—链表
      3. K:线性表的落实—顺序表
      4. K:顺序表和链表的可比
      5. k:特殊之线性表—栈
      6. k:特殊的线性表—队列
      7. K:栈和排的较
      8. Q:关于栈的广大问题
      9. KandQ:栈相关的算法
    2. 塑造和丛林
      1. KandQ:那年,那树,那些知识点
      2. K:树和二叉树
      3. K:二叉树
      4. K:二叉树的非递归遍历
      5. K:树、二叉树与山林里面的变换及其有关代码实现
      6. K:哈弗曼树
  • 操作系统
  • 设计模式
    1. 单例模式
      1. KandQ:单例模式之七栽写法及其相关题材分析
  • 框架相关
    1. 聚集框架
      1. 基础知识
        1. K:java中的hashCode和equals方法
        2. K:HashMap中hash函数的意向
        3. K:hash(哈希)碰撞攻击
  • 电脑网络
  • 数据库
    1. mysql
    2. redies
  • IDE (eclipse为主)
  • 分布式及集群
    1. RMI
      1. K:java中的RMI(Remote Method
        Invocation)
  • python
    1. Q:同时设置了python2和python3底微机下pip的采用
  • 其它
    1. 正则表达式
      1. K:正则表达式之基础简介
      2. K:正则表达式之进阶
      3. K:常见的正则表达式
      4. K:java中正好则表达式的用验证及其举例
    2. 杂项
      1. Q:javax.comm 2.0
        windows下Eclipse的配置
    3. 杂谈

片种方式都使经过重写run()方法来定义线程的所作所为,推荐用后者,因为Java中的接轨是单继承,一个接近闹一个父类,如果后续了Thread类就无法再累其他类似了,显然以Runnable接口更为灵活

加:Java
5以后创办线程还有第三种方法:实现Callable接口,该接口中之call方法可于线程执行完毕时发生一个回去值,代码如下所示:

 

import java.util.ArrayList;

 

import java.util.List;

 

import java.util.concurrent.Callable;

 

import java.util.concurrent.ExecutorService;

 

import java.util.concurrent.Executors;

 

import java.util.concurrent.Future;

 

 

 

class MyTask ``implements Callable<Integer> {

 

``private int upperBounds;

 

 

 

``public MyTask(``int upperBounds) {

 

``this``.upperBounds = upperBounds;

 

``}

 

 

 

``@Override

 

``public Integer call() ``throws Exception {

 

``int sum = ``0``;

 

``for``(``int i = ``1``; i <= upperBounds; i++) {

 

``sum += i;

 

``}

 

``return sum;

 

``}

 

 

 

}

 

 

 

class Test {

 

 

 

``public static void main(String[] args) ``throws
Exception {

 

``List<Future<Integer>> list = ``new ArrayList<>();

 

``ExecutorService service = Executors.newFixedThreadPool(``10``);

 

``for``(``int i = ``0``; i < ``10``; i++) {

 

``list.add(service.submit(``new
MyTask((``int``) (Math.random() * ``100``))));

 

``}

 

 

 

``int sum = ``0``;

 

``for``(Future<Integer> future : list) {

 

``// while(!future.isDone()) ;

 

``sum += future.get();

 

``}

 

 

 

``System.out.println(sum);

 

``}

 

}