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/
随机推荐
- 制作keil5的pack
[原创出品§转载请注明出处] 出处:http://www.cnblogs.com/libra13179/p/6273415.html 我在这里就交大家怎样制作自己的Pack,(这里是我制作好的http ...
- Spring Data Jpa --- 入门
一.概述 Spring Data是Spring下的一个子项目,用于简化数据库访问,并支持云服务的开源框架.Spring Data支持NoSQL和 关系数据存储,其主要目标是使得数据库的访问变得方便快捷 ...
- java.util包简介
java.util包含集合框架.遗留的 collection 类.事件模型.日期和时间设施.国际化和各种实用工具类(字符串标记生成器.随机数生成器和位数组.日期Date类.堆栈Stack类.向量Vec ...
- VNC连接黑屏的问题
今天尝试在CentOS上安装一个VNC Server.CentOS5 已经自带了VNC,默认也已经安装了,只要配置一下就可以了(如果没有安装,可以:yum install vnc vncserver安 ...
- Conductor Task Workers
由远程worker执行的conductor任务通过HTTP端点进行通信以轮询任务并更新执行状态. conductor提供了轮询任务的框架,管理执行线程并将执行状态更新回服务器.该框架提供了Java和P ...
- 大型运输行业实战_day03_1_基于intellij idea的非maven spring+springMVC+mybatis搭建
1.搭建标准web项目结构 搭建完成后的项目结构如图 1.创建普通web项目(略) 2.在lib中添加jar包 3.在resources中添加spring-config.xml主配置文件 <?x ...
- zg项目 应用系统编码原则
一.编码说明: 1.系统编码采用三码为原则,通常两码简称之. 1>.子系统或类型 2>.系统小分类 3>.系统大分类 如 IPMS领域业务群: DA 应用软件发展管理系统 DE公用副 ...
- richface的配置、用法介绍和注意事项
richface的配置.用法介绍和注意事项一.RichFaces (3.1.x) 技术需求 1.JDK 1.5 或更高版本: 2.支持的 JSF 实现: Sun JSF 1.1 RI - 1.2 My ...
- SVN的基本操作
右键SVN Commit 提交成功了,我们把SVN的服务器端刷新一下 所有的操作如果只是删除本地的文件都不会影响服务器端的文件,除非右键SVN Commit删除文件或者是新增文件才会对服务器端的仓库里 ...
- poj1088-滑雪 【dfs 记忆化搜索】
http://poj.org/problem?id=1088 滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 79806 ...