java--多线程编程简介
1.什么时候使用多线程编程
一个任务在正常情况下是按顺序执行的,但是如果当前任务里有多个相似进程块(例如for,while语句),我们就可以考虑把这些代码块抽出来并行运行,无需阻塞
2.实现多线程的几种方式
一种是继承Thread类重写run方法,另一种是实现Runnable接口重写run方法
启动多线程很多情况下是为了处理并发进程,此时对于部分实时性要求不是那么高的业务需求,我们还可以通过实现队列的方式,异步实现。
3.举例
继承Thread
/**
*
* @ClassName: ThreadByEx
* @Description: TODO
* @author Mr.jqCheng
* @date 2018年9月26日
*
*/
public class ThreadByEx extends Thread{ @Override
public void run() {
// TODO Auto-generated method stub
System.out.println("我是继承线程");
} }
实现Runnable
/**
*
* @ClassName: ThreadByRunnable
* @Description: TODO
* @author Mr.jqCheng
* @date 2018年9月26日
*
*/
public class ThreadByRunnable implements Runnable{ /*public ThreadByRunnable() {
this.run();
// TODO Auto-generated constructor stub
}*/ public void run() {
// TODO Auto-generated method stub
System.out.println("我是实现进程");
} }
测试:
/**
*
* @ClassName: Test
* @Description: TODO
* @author Mr.jqCheng
* @date 2018年9月26日
*
*/
public class Test { public static void main(String[] args) {
// 继承Thread启动的方法
ThreadByEx t1 = new ThreadByEx();
t1.start();// 启动线程
// 实现Runnable启动线程的方法
ThreadByRunnable r = new ThreadByRunnable();
Thread t2 = new Thread(r);
t2.start();// 启动线程
//new ThreadByRunnable();
} }
运行结果:
我是继承线程
我是实现进程
ok,简单的多线程实现方式完成了,在调用start()的时候,该进程已经进入可执行状态,等待系统执行。
线程处理的几个常用方法:
package com.orange.util; /**
*
* @ClassName: Test
* @Description: TODO
* @author Mr.jqCheng
* @date 2018年9月26日
*
*/
public class Test { public static void main(String[] args) { Thread deamon2 = new Thread(new DaemonRunner2(), "otherRunner");
deamon2.start();// 启动线程
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Thread deamon = new Thread(new DaemonRunner(), "DaemonRunner");
// 设置为守护线程
deamon.setDaemon(true);
deamon.start();// 启动线程
} static class DaemonRunner implements Runnable { public void run() {
// TODO Auto-generated method stub try {
Thread.sleep(300);
Thread t = Thread.currentThread();
System.out.println(t);
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("进入守护线程,说明现在还有其他线程在执行");
} } } static class DaemonRunner2 implements Runnable {
public void run() {
// TODO Auto-generated method stub
try {
Thread.sleep(1500);
System.out.println("我是其他线程");
} catch (Exception e) {
e.printStackTrace();
}
} } }
执行结果:
Thread[DaemonRunner,5,main]
进入守护线程,说明现在还有其他线程在执行
我是其他线程
首先,先启动其他线程,需要耗时1500ms,同时,主线程耗时1000ms后,开始进入守护线程,此时其它线程还在运行,到了守护线程,耗时300ms,其他线程仍在执行,继续往下,守护线程执行完毕
但是如果我把守护线程的300ms改成500ms,会发生什么事呢?
出现过两种情况,毕竟在临界值
1.我是其他线程
2.Thread[DaemonRunner,5,main]
进入守护线程,说明现在还有其他线程在执行
我是其他线程
本文来自 zejian_ 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/javazejian/article/details/50878598?utm_source=copy
java--多线程编程简介的更多相关文章
- Java多线程概念简介 多线程中篇(一)
Java的线程与操作系统的线程 在线程的相关介绍中,有讲到“线程的实现”分为三种:内核支持,用户级以及两者混合.(这只是一种简要的分类) Java线程在JDK1.2之前,是用户线程实现的 而在JD ...
- Java多线程编程实战指南(核心篇)读书笔记(二)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76651408冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java多线程编程模式实战指南(二):Immutable Object模式--转载
本文由本人首次发布在infoq中文站上:http://www.infoq.com/cn/articles/java-multithreaded-programming-mode-immutable-o ...
- Java多线程编程(1)--Java中的线程
一.程序.进程和线程 程序是一组指令的有序集合,也可以将其通俗地理解为若干行代码.它本身没有任何运行的含义,它只是一个静态的实体,它可能只是一个单纯的文本文件,也有可能是经过编译之后生成的可执行文 ...
- Java多线程编程核心技术---学习分享
继承Thread类实现多线程 public class MyThread extends Thread { @Override public void run() { super.run(); Sys ...
- Java多线程编程核心技术---对象及变量的并发访问(二)
数据类型String的常量池特性 在JVM中具有String常量池缓存的功能. public class Service { public static void print(String str){ ...
- Java多线程编程——进阶篇二
一.线程的交互 a.线程交互的基础知识 线程交互知识点需要从java.lang.Object的类的三个方法来学习: void notify() 唤醒在此对象监视器上等待的单个 ...
- Java多线程编程详解
转自:http://programming.iteye.com/blog/158568 线程的同步 由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题.Ja ...
- 【Todo】【读书笔记】Java多线程编程指南-设计模式篇
下了这本书<Java多线程编程指南-设计模式篇>, 还有另一本<JAVA多线程设计模式>,据说内容有重复,结合着看.
- Java多线程编程总结(学习博客)
Java多线程编程总结:网址:http://lavasoft.blog.51cto.com/62575/27069/
随机推荐
- JAVA 读取配置文件 xxx.properties
package config_demo; import java.io.InputStream; import java.util.Properties; public class UrlDemo { ...
- JAVA Serverlet 请求头信息和响应头信息
<1>获取请求头信息 //获取请求头信息的全部名称 Enumeration<String> header = request.getHeaderNames(); while(h ...
- maven下载与配置
转自:https://www.cnblogs.com/jdys/p/3770534.html 1.访问官网:从maven官网下载maven http://maven.apache.org/downlo ...
- 机器学习入门-概率阈值的逻辑回归对准确度和召回率的影响 lr.predict_proba(获得预测样本的概率值)
1.lr.predict_proba(under_text_x) 获得的是正负的概率值 在sklearn逻辑回归的计算过程中,使用的是大于0.5的是正值,小于0.5的是负值,我们使用使用不同的概率结 ...
- 常用html设置:
省略 居中 1. 省略 ellipsis: text-overflow:ellipsis: 要求容器必须是固定的,要不然无法做省略. table的省略 table{ table_layout:fixe ...
- ABAP-长文本处理
- UI5-文档-4.11-Pages and Panels
在完成了应用程序结构的所有工作之后,是时候改进我们的应用程序的外观了.在这一步中,您还将了解控件聚合. Preview A panel is now displaying the controls f ...
- js--语音播报
一.借用百度接口 function speckText(){ var str = "请及时预警!"; //var request= new URLRequest(); var ur ...
- Nagios自定义扩展
原理:监控端通过check_nrpe把要监控的指令发送给被监控端,被监控端在本机执行监控任务,并把执行的结果发送回监控端. 如何扩展Nagios,以实现自定义监控? 借助插件进行的每一次有效的Nagi ...
- 【转载】 Java并发编程:深入剖析ThreadLocal
原文链接:http://www.cnblogs.com/dolphin0520/p/3920407.html感谢作者的辛苦总结! Java并发编程:深入剖析ThreadLocal 想必很多朋友对Thr ...