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/
随机推荐
- Redis 几个全局命令, 以及事物
1, 清空当前数据库的所有数据 => flushdb 2, 清空所有数据库的所有数据 => flushall 3, key 值检索命令 => scan num match if 会 ...
- 获取ASPxGridView 中的数据(仅仅是获取;注意模板是如何获取的)
1.取得控件值 using System.Collections.Generic; //取得当前控件值的集合 直接寻找控件的ID List<object> keyValues = this ...
- MySQL优化十大技巧
转自:https://m.2cto.com/database/201701/557910.html MYSQL优化主要分为以下四大方面: 设计:存储引擎,字段类型,范式与逆范式 功能:索引,缓存,分区 ...
- is not on any development teams
is not on any development teams 1)账号正在申请中 2)申请成功后的账号? 加了3个账号,都是这样子的. 1:Xcode>Window> "Org ...
- 压缩文件tar.gz和zip之间的区别
我们在开发的时候通常要先下载相关的软件或者是源码,或者是jar包.在下载东西的时候总是碰见后缀是.tar.gz和.zip的问题,搞不清楚是怎么回事,不晓得下载哪个文件才是对自己有用的.现在我知道了,其 ...
- ubuntu禁用super(win)键
ubuntu在切换输入法使用super + space的时候经常会在按下super的时候弹出luncher,影响操作,解决方法为禁用super启动luncher. 1.安装compizconfig-s ...
- GIS on CentOS 7 之 PostgreSQL & PostGIS
PostgreSQL & PostGIS 安装postgresql 配置好yum源之后,使用yum info postgresql可发现 postgresql的版本为9.2.23,若想安装最新 ...
- Ubuntu 18.04上安装R及Rstudio
安装R引用自:https://www.howtoing.com/how-to-install-r-on-ubuntu-18-04 安装Rstudio引用自:https://www.rstudio.co ...
- with as (转)
sql with as 用法(适用sqlserver,好像oracle也适用) Server 2005中提供了公用表表达式(CTE),使用CTE,可以使SQL语句的可维护性,同时,CTE要比表变量的效 ...
- java程序运行时间
方法一 long startTime = System.currentTimeMillis(); //获取开始时间 doSomething(); //测试的代码段 long endTime = Sys ...