java多线程(简单介绍)
简单介绍
线程是程序运行的基本执行单元。当操作系统(不包括单线程的操作系统,如微软早期的DOS)在执行一个程序时,会在系统中建立一个进程,而在这个进程中,必须至少建立一个线程(这个线程被称为主线程)来作为这个程序运行的入口点。因此,在操作系统中运行的任何程序都至少有一个主线程。
线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段部所使用的数据,如线程执行函数中所定义的变量。
线程:
1、线程是轻量级的进程
2、线程没有独立的地址空间(内存空间)
3、线程是由进程创建的(寄生在进程)
4、一个进程可以拥有多个线程-->这就是我们常说的多线程编程
5、线程有几种状态:
a、新建状态(new)
b、就绪状态(Runnable)
c、运行状态(Running)
d、阻塞状态(Blocked)
e、死亡状态(Dead)
注意:任何一个线程在建立时都会执行一个函数,这个函数叫做线程执行函
线程类的一些常用方法
sleep(): 强迫一个线程睡眠N毫秒。
isAlive(): 判断一个线程是否存活。
join(): 等待线程终止。 //只有等到子线程结束了主线程才能执行。(Waits for this thread to die.)
activeCount(): 程序中活跃的线程数。
enumerate(): 枚举程序中的线程。
currentThread(): 得到当前线程。
isDaemon(): 一个线程是否为守护线程。
setDaemon(): 设置一个线程为守护线程。(用户线程和守护线程的区别在于,是否等待主线程依赖于主线程结束而结束)
setName(): 为线程设置一个名称。
wait(): 强迫一个线程等待。
notify(): 通知一个线程继续运行。
setPriority(): 设置一个线程的优先级
多线程的实现方式
通过以下两种方法创建 Thread 对象:
继承Thread
Java中“一切皆对象”,线程也被封装成一个对象。我们可以通过继承Thread类来创建线程。线程类中的的run()方法包含了该线程应该执行的指令。我们在衍生类中覆盖该方法,以便向线程说明要做的任务:
声明一个 Thread 类的子类,并覆盖 run() 方法
class myThread extends Thread{
@Override
public void run() {
System.out.println("继承Thread");
}
}
简单例子
main执行
System.out.println("多线程开始:");
for(int i=1;i<=10;i++) {
stat(i);
}
//随机延迟
public static int reandom(int stop,int stat ){
return (int)Math.round(Math.random()*(stat-stop)+stop);
}
public static void stat(int i){
System.out.print("线程:"+i+" 开始运行");
Thread t=new Thread(){
public void run(){
System.out.println(UUID.randomUUID());
}
};
int s=reandom(5,2);
System.out.print(" 延迟:"+s+"秒 唯一UUID:");
try {
t.sleep(s*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
t.start();
try {
t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
固定线程
//固定线程10
ExecutorService service =Executors.newFixedThreadPool(10); for (int i = 0; i < 23; i++) {
service.execute(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread());
}
});
}
可以进一步简化为(jdk8):
for (int i = 0; i < 23; i++) {
service.execute(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread());
}
});
}
运行结果是一样的:
多线程面试题:https://www.cnblogs.com/weibanggang/p/9470462.html
java多线程(简单介绍)的更多相关文章
- iOS开发多线程篇—多线程简单介绍
iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcod ...
- Java NIO简单介绍(二)
上一篇<NIO简单介绍(一)>中讲解了NIO中本地IO相关的内容,这篇重点介绍的NIO的非阻塞式网络通信 一.阻塞与非阻塞 传统的 IO 流都是阻塞式的.也就是说,当一个线程调用 read ...
- Java集合简单介绍
再最前面分享一下我再学习集合时的方法: 1.首先了解各集合的定义和特点 2.集合的构造方法和常用方法(增删改查等) 3.了解集合使用的场景,再什么情况下使用什么类型的集合(关键是集合的特性) 4.了解 ...
- Java多线程ThreadLocal介绍
在Java多线程环境下ThreadLocal就像一家银行,每个线程就是银行里面的一个客户,每个客户独有一个保险箱来存放金钱,客户之间的金钱不影响. private static ThreadLocal ...
- java 中的多线程简单介绍
package com.zxf.demo; /* * 多线程的实现方式两种? * 一..实现 runnable 接口 * 2.重写run方法 Run():当一个线程启动后,就会自动执行该方法 * 3. ...
- JAVA NIO 简单介绍
Version:0.9 StartHTML:-1 EndHTML:-1 StartFragment:00000099 EndFragment:00918492 一:为什么要使用NIO技术 ...
- java 多线程简单例子
实现线程的方式是一,继承Thread类,重写父类的run()方法 二,实现接口Runnable中的run()方法. 下面是简单的例子 例子1:银行存取钱问题 package com.direct.de ...
- Java Bean 简单介绍及其应用
Bean的中文含义是"豆子",顾名思义JavaBean是一段Java小程序.JavaBean实际上是指一种特殊的Java类.它通经常使用来实现一些比較经常使用的简单功能.并能够非常 ...
- Java Swing 简单介绍
Swing 是一个为Java设计的GUI工具包. Swing是JAVA基础类的一部分. Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表. Swing提供许多比AWT更好的屏幕 ...
随机推荐
- B站视频下载(VideoHelper)
继续上次的知乎爬虫, 这次开始了哔哩哔哩的爬虫实践: 首先介绍下如何下载吧: VideoHelper 里面有三种方式下载b站视频. 同样的流程, 还是先抓包,分析参数,寻找参数(包括之前的请求包和页面 ...
- 1.2 js基础
1.onchange 99%用到select上边. 2.js是干什么的,修改css样式和属性 3.选项卡步骤 1.获取元素 2.循环给按钮加自定义属性 3.循环给按钮加事件 4.封装 ...
- QQ音乐:React v16 新特性实践
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由QQ音乐技术团队发表于云+社区专栏 自从去年9月份 React 团队发布了 v16.0 版本开始,到18年3月刚发布的 v16.3 版 ...
- js【jquery】-事件
1.event对象 在IE.chrome中它是全局变量 与事件相关的信息会保存在event对象中,只有在事件发生的过程中,event才有信息 在其他浏览器中: 通过事件函数的第一个参数传入的 even ...
- OpenLayers 3 给features 添加手势
map.on('pointermove',function(e){ var pixel = map.getEventPixel(e.originalEvent); var hit = map.hasF ...
- js贪食蛇
<!DOCTYPE html><head><title>canvas贪食蛇</title><style>.canvas{ backgr ...
- ubuntu GITLAB完全导入SVN(提交历史,用户)项目
从SVN导入到GITLAB目前没有直接的方案,通常需要通过GIT转换:SVN –>GIT –>GITLAB.通过这种方式,将SVN的提交历史,用户信息一并导入到gitlab 注:本文只适用 ...
- 菜鸟学习Spring——SpringMVC注解版在服务器端获取Json字符串并解析
一.概述. SpringMVC在服务端把客户端传过来的JSON字符串,并把JSON字符串转成 JSON对象并取得其中的属性值,这个在项目中经常用到. 二.代码演示. 需要添加的jar包. 2.1 we ...
- .NET开源工作流RoadFlow-表单设计-隐藏域
隐藏域即<input type="hidden" value=""/>标签:
- 生成对抗式网络 GAN的理解
转自:https://zhuanlan.zhihu.com/p/24767059,感谢分享 生成式对抗网络(GAN)是近年来大热的深度学习模型.最近正好有空看了这方面的一些论文,跑了一个GAN的代码, ...