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/
随机推荐
- linux 使用随笔
目录:1,ab命令 一,ab命令 ab网站压力测试命令的参数.输出结果的中文注解 ab命令是Apache的Web服务器的性能测试工具,它可以测试安装Web服务器每秒种处理的HTTP请求. 来自: ht ...
- Spring Boot实践——用外部配置填充Bean属性的几种方法
引用:https://blog.csdn.net/qq_17586821/article/details/79802320 spring boot允许我们把配置信息外部化.由此,我们就可以在不同的环境 ...
- html file 文件批量上传 以及碰到的一些问题提
//javascript 代码 $("#submite").click(function (evt) { var arrayTr = $("#datatables&quo ...
- Spring Boot中启动HTTPS
一,生成https 的证书 1,在相应的根目录下 keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize -keyst ...
- bmp和Variant的转换
procedure TForm2.VariantToBMP(aValue : OleVariant;var aBmp:TBitmap); var Stream : TMemoryStream; ...
- C#实现二维码生成与解码
前几天公司内部分享了一个关于二维码的例子,觉得挺好玩的,但没有提供完整的源码.有时候看到一个好玩的东西,总想自己Demo一个,于是抽空就自己研究了一下. 一.二维码的原理 工欲善其事,必先利其器.要生 ...
- linux安装本地blast
1)wget ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/2.8.0alpha/ncbi-blast-2.8.0-alpha+-x64-li ...
- java并发:CAS算法和ABA问题
CAS算法是硬件对于并发的支持,针对多处理器操作而设计的处理器中的一种特殊指令. CAS用于管理对共享数据的并发访问. java的并发包中,AQS.原子操作类等都是基于CAS实现的. CAS 是一种 ...
- LIS问题(DP解法)---poj1631
题目链接:http://poj.org/problem?id=1631 这个题题目有些难看懂hhh,但实质就是求LIS--longest increasing sequence. 以下介绍LIS的解法 ...
- windows server 2008 远程桌面连接数修改--无限连接
1.开启远程桌面 我的电脑 | 属性 | 远程设置 | 远程 | 进允许运行使用网络级别身份验证的远程桌面的计算机连接(更安全)(N)