Java多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。

1、继承Thread类实现多线程
继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,通过自己的类直接extend Thread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。例如:

[java] view plaincopy
  1. public class MyThread extends Thread {
  2.   public void run() {
  3.    System.out.println("MyThread.run()");
  4.   }
  5. }

在合适的地方启动线程如下:

[java] view plaincopy
  1. MyThread myThread1 = new MyThread();
  2. MyThread myThread2 = new MyThread();
  3. myThread1.start();
  4. myThread2.start();

2、实现Runnable接口方式实现多线程
如果自己的类已经extends另一个类,就无法直接extends Thread,此时,必须实现一个Runnable接口,如下:

[java] view plaincopy
  1. public class MyThread extends OtherClass implements Runnable {
  2.   public void run() {
  3.    System.out.println("MyThread.run()");
  4.   }
  5. }

为了启动MyThread,需要首先实例化一个Thread,并传入自己的MyThread实例:

[java] view plaincopy
  1. MyThread myThread = new MyThread();
  2. Thread thread = new Thread(myThread);
  3. thread.start();

事实上,当传入一个Runnable target参数给Thread后,Thread的run()方法就会调用target.run(),参考JDK源代码:

[java] view plaincopy
  1. public void run() {
  2.   if (target != null) {
  3.    target.run();
  4.   }
  5. }

而且Thread实现类也是实现的runnable接口

 1  *
 2  * @author  unascribed
 3  * @see     Runnable
 4  * @see     Runtime#exit(int)
 5  * @see     #run()
 6  * @see     #stop()
 7  * @since   JDK1.0
 8  */
 9 public
10 class Thread implements Runnable {
11     /* Make sure registerNatives is the first thing <clinit> does. */
12     private static native void registerNatives();
13     static {
14         registerNatives();
15     }

3、接下来我们再讲讲线程的优先级设置以及一些常用的属性设置

Thread thread = new Thread();

在这个类里我们可以设置线程的优先级

 1 public class Test {
 2         public static void main(String[] args) {
 3                 Thread t1 = new MyThread1();
 4                 Thread t2 = new Thread(new MyRunnable());
 5                 t1.setPriority(10);
 6                 t2.setPriority(1);
 7
 8                 t2.start();
 9                 t1.start();
10         }
11 } 

设置线程的名字和id还有超时时间等等

Java线程的优先级从1到10级别,值越大优先级越高

最后附上一个号连接

http://blog.csdn.net/aboy123/article/details/38307539

转载于:https://www.cnblogs.com/holdouts/articles/5888185.html

瞎学的几天 ----java多线程和线程池相关推荐

  1. Java多线程之线程池配置合理线程数

    Java多线程之线程池配置合理线程数 目录 代码查看公司服务器或阿里云是几核的 合理线程数配置之CPU密集型 合理线程数配置之IO密集型 1. 代码查看公司服务器或阿里云是几核的 要合理配置线程数首先 ...

  2. Java多线程之线程池的手写改造和拒绝策略

    Java多线程之线程池的手写改造和拒绝策略 目录 自定义线程池的使用 四种拒绝策略代码体现 1. 自定义线程池的使用 自定义线程池(拒绝策略默认AbortPolicy) public class My ...

  3. Java多线程之线程池7大参数、底层工作原理、拒绝策略详解

    Java多线程之线程池7大参数详解 目录 企业面试题 线程池7大参数源码 线程池7大参数详解 底层工作原理详解 线程池的4种拒绝策略理论简介 面试的坑:线程池实际中使用哪一个? 1. 企业面试题 蚂蚁 ...

  4. Java多线程之线程池详解

    Java多线程之线程池详解 目录: 线程池使用及优势 线程池3个常用方式 线程池7大参数深入介绍 线程池底层工作原理 1. 线程池使用及优势 线程池做的工作主要是控制运行的线程的数量,处理过程中将任务 ...

  5. java 多线程使用线程池_Java多线程:如何开始使用线程

    java 多线程使用线程池 什么是线程? (What is a Thread?) A thread is a lightweight process. Any process can have mul ...

  6. java多线程之线程池简介

    前言 池化技术已经屡见不鲜了,比如数据库连接池,大家的项目中应该也用到了线程池.池化技术的好处:降低资源的消耗,提高响应速度,提高线程的可管理性.本篇主要是和大家一起分析下线程池的架构和它的工作流程. ...

  7. java多线程及线程池使用

    Java多线程及线程池的使用 Java多线程 一.Java多线程涉及的包和类 二.Java创建多线程的方式 三.Java线程池 1. 创建线程池ThreadPoolExecutor的7个参数 2. 线 ...

  8. Java多线程之线程池的参数和配置

    在Java多线程编程中,线程池是一种常见的技术,用于管理线程的创建和销毁.线程池中的线程可以被重复利用,从而减少了线程的创建和销毁的开销,提高了程序的性能.在Java中,线程池的参数和配置非常重要,不 ...

  9. java多线程和线程池

    目录 零.java线程理解 0.1 两种线程模型 0.1.1 用户级线程 ULT 0.1.2 内核级线程 KLT--JAVA虚拟机使用的线程模型(KLT) 0.2 java线程与系统内核线程 0.3 ...

最新文章

  1. 硬中断与软中断的区别!
  2. 测试Mybatis时事务自动回滚,无法完成增删改
  3. 经典C语言程序100例之十四
  4. vim学习手册-10后序
  5. 华为API战略:规范、组织和流程驱动企业大循环
  6. C++第五章课后习题-输入n个字符串,将他们按字母由从小到大的顺序排序并输出
  7. 将IP包转换成电或光信号发送出去
  8. 卧槽!新来的妹纸rm -rf把公司整个数据库删没了,整个项目组慌了~
  9. LINUX终端可以使用reset清除所有输出
  10. 关于元器件选型需要注意的问题
  11. [关系图谱] 一.Gephi通过共现矩阵构建知网作者关系图谱
  12. 张一鸣的大学四年收获及工作感悟
  13. java开源图像处理ku_我是这么设计高性能海量数(ku)据(zi)查询系统的(一)
  14. PS-第七天-图层混合模式及图层蒙版
  15. 多弹多约束协同制导问题
  16. 应对ME23数据抓取时ID发生变化 SAP
  17. python爬取微信好友头像_使用python itchat包爬取微信好友头像形成矩形头像集的方法...
  18. 全栈的好处:七天和两周
  19. react webpack配置
  20. Cadence 工具功能分析

热门文章

  1. RTX5 | 消息队列04 - (实战技巧)串口中断回调函数ISR同步线程
  2. STM32的学习记录--2.WiFi模块的使用
  3. Spring Boot笔记-@ComponentScan初步解析
  4. PythonRabbitmq文档阅读笔记-生产者数据直接送入队列消费者消费
  5. Qt获取本地网卡信息
  6. TCP/IP学习笔记-Qt中的ReuseAddressHint以及SO_REUSEADDR,以为组播常用场景分析
  7. Qt工作笔记-简单的画图工具
  8. Java高级语法笔记-字符集与中文编码
  9. java正则表达式 ascii_Java——正则表达式
  10. python网球比赛模拟_Python-体育竞技模拟