瞎学的几天 ----java多线程和线程池
Java多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。
1、继承Thread类实现多线程
继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,通过自己的类直接extend Thread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。例如:
- public class MyThread extends Thread {
- public void run() {
- System.out.println("MyThread.run()");
- }
- }
在合适的地方启动线程如下:
- MyThread myThread1 = new MyThread();
- MyThread myThread2 = new MyThread();
- myThread1.start();
- myThread2.start();
2、实现Runnable接口方式实现多线程
如果自己的类已经extends另一个类,就无法直接extends Thread,此时,必须实现一个Runnable接口,如下:
- public class MyThread extends OtherClass implements Runnable {
- public void run() {
- System.out.println("MyThread.run()");
- }
- }
为了启动MyThread,需要首先实例化一个Thread,并传入自己的MyThread实例:
- MyThread myThread = new MyThread();
- Thread thread = new Thread(myThread);
- thread.start();
事实上,当传入一个Runnable target参数给Thread后,Thread的run()方法就会调用target.run(),参考JDK源代码:
- public void run() {
- if (target != null) {
- target.run();
- }
- }
而且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多线程和线程池相关推荐
- Java多线程之线程池配置合理线程数
Java多线程之线程池配置合理线程数 目录 代码查看公司服务器或阿里云是几核的 合理线程数配置之CPU密集型 合理线程数配置之IO密集型 1. 代码查看公司服务器或阿里云是几核的 要合理配置线程数首先 ...
- Java多线程之线程池的手写改造和拒绝策略
Java多线程之线程池的手写改造和拒绝策略 目录 自定义线程池的使用 四种拒绝策略代码体现 1. 自定义线程池的使用 自定义线程池(拒绝策略默认AbortPolicy) public class My ...
- Java多线程之线程池7大参数、底层工作原理、拒绝策略详解
Java多线程之线程池7大参数详解 目录 企业面试题 线程池7大参数源码 线程池7大参数详解 底层工作原理详解 线程池的4种拒绝策略理论简介 面试的坑:线程池实际中使用哪一个? 1. 企业面试题 蚂蚁 ...
- Java多线程之线程池详解
Java多线程之线程池详解 目录: 线程池使用及优势 线程池3个常用方式 线程池7大参数深入介绍 线程池底层工作原理 1. 线程池使用及优势 线程池做的工作主要是控制运行的线程的数量,处理过程中将任务 ...
- java 多线程使用线程池_Java多线程:如何开始使用线程
java 多线程使用线程池 什么是线程? (What is a Thread?) A thread is a lightweight process. Any process can have mul ...
- java多线程之线程池简介
前言 池化技术已经屡见不鲜了,比如数据库连接池,大家的项目中应该也用到了线程池.池化技术的好处:降低资源的消耗,提高响应速度,提高线程的可管理性.本篇主要是和大家一起分析下线程池的架构和它的工作流程. ...
- java多线程及线程池使用
Java多线程及线程池的使用 Java多线程 一.Java多线程涉及的包和类 二.Java创建多线程的方式 三.Java线程池 1. 创建线程池ThreadPoolExecutor的7个参数 2. 线 ...
- Java多线程之线程池的参数和配置
在Java多线程编程中,线程池是一种常见的技术,用于管理线程的创建和销毁.线程池中的线程可以被重复利用,从而减少了线程的创建和销毁的开销,提高了程序的性能.在Java中,线程池的参数和配置非常重要,不 ...
- java多线程和线程池
目录 零.java线程理解 0.1 两种线程模型 0.1.1 用户级线程 ULT 0.1.2 内核级线程 KLT--JAVA虚拟机使用的线程模型(KLT) 0.2 java线程与系统内核线程 0.3 ...
最新文章
- 硬中断与软中断的区别!
- 测试Mybatis时事务自动回滚,无法完成增删改
- 经典C语言程序100例之十四
- vim学习手册-10后序
- 华为API战略:规范、组织和流程驱动企业大循环
- C++第五章课后习题-输入n个字符串,将他们按字母由从小到大的顺序排序并输出
- 将IP包转换成电或光信号发送出去
- 卧槽!新来的妹纸rm -rf把公司整个数据库删没了,整个项目组慌了~
- LINUX终端可以使用reset清除所有输出
- 关于元器件选型需要注意的问题
- [关系图谱] 一.Gephi通过共现矩阵构建知网作者关系图谱
- 张一鸣的大学四年收获及工作感悟
- java开源图像处理ku_我是这么设计高性能海量数(ku)据(zi)查询系统的(一)
- PS-第七天-图层混合模式及图层蒙版
- 多弹多约束协同制导问题
- 应对ME23数据抓取时ID发生变化 SAP
- python爬取微信好友头像_使用python itchat包爬取微信好友头像形成矩形头像集的方法...
- 全栈的好处:七天和两周
- react webpack配置
- Cadence 工具功能分析
热门文章
- RTX5 | 消息队列04 - (实战技巧)串口中断回调函数ISR同步线程
- STM32的学习记录--2.WiFi模块的使用
- Spring Boot笔记-@ComponentScan初步解析
- PythonRabbitmq文档阅读笔记-生产者数据直接送入队列消费者消费
- Qt获取本地网卡信息
- TCP/IP学习笔记-Qt中的ReuseAddressHint以及SO_REUSEADDR,以为组播常用场景分析
- Qt工作笔记-简单的画图工具
- Java高级语法笔记-字符集与中文编码
- java正则表达式 ascii_Java——正则表达式
- python网球比赛模拟_Python-体育竞技模拟