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{@Overridepublic 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();}

固定线程

  //固定线程10ExecutorService service =Executors.newFixedThreadPool(10);for (int i = 0; i < 23; i++) {service.execute(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread());}});}

可以进一步简化为(jdk8):

 for (int i = 0; i < 23; i++) {service.execute(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread());}});}

运行结果是一样的:

多线程面试题:https://www.cnblogs.com/weibanggang/p/9470462.html

posted @ 2018-08-13 15:11 韦邦杠 阅读(...) 评论(...) 编辑 收藏

java多线程(简单介绍)相关推荐

  1. 【西行】Java 编程语言简单介绍

    J3 - 白起 Java(Java发展史 # 笔记) 1.Java 发展史 Java 语言的诞生并不是精心策划.制作,最后产生出来的,因为当时的开发者并没有想创造出世界上 如此伟大的编程语言之一. 时 ...

  2. Java线程、Java多线程详细介绍

    目录 一.进程和线程的区别 1.1 进程 1.2 线程 二.并发和并行 2.1 并行 2.2  并发 2.3 监控线程的执行情况 三.创建方式 3.1 继承Thread类 思考:为什么不直接通过对象调 ...

  3. java enumerator_简单介绍java Enumeration

    Enumeration接口 Enumeration接口本身不是一个数据结构.但是,对其他数据结构非常重要. Enumeration接口定义了从一个数据结构得到连续数据的手段.例如,Enumeratio ...

  4. Java虚拟机简单介绍

    安装jdk之后一般都会安装jre,在jre中就包含有Java虚拟机(jvm). jvm是虚拟出来的,类似于简单的系统,有自己的内存管理,寄存器,程序计数器cp,环境指针和栈指针等. 1.先说Java虚 ...

  5. iOS开发值多线程简单介绍

    2019独角兽企业重金招聘Python工程师标准>>> 今天,我们就来说一下iOS多线程的问题,为什么要使用iOS多线程?因为一个应用程序在一个时间内可能有一个呗或者多任务,我们不可 ...

  6. java castor_Castor简单介绍

    本节摘要:本节主要介绍Castor插件的使用. preparation 1.castor简介 castor是一种将java对象和XML自动绑定的开源软件.它可以在java对象.XML文本.SQL数据表 ...

  7. Java中间件简单介绍

    中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少程序设计的复杂性,将注意力集中在自己的业务上,不必再为程序在不同系统软件上的移植而重复工作,从而大大减少了技术上的负担 ...

  8. java数组简单介绍以及其方法

    小谈一下java数组 数组是存放数据的容器,有两个特点:元素类型唯一,长度固定. 一维数组声明:类型[] 数组名;类型 数组名[];推荐用前一种. 多维数组声明同样是以上要求. 在数组创建时,要注意一 ...

  9. iOS多线程编程之多线程简单介绍(转载)

    一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过& ...

  10. iOS开发多线程篇—多线程简单介绍

    一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过& ...

最新文章

  1. [ Nowcoder Contest 165 #D ] 合法括号序列
  2. 7.6~7.20集训总结(一)
  3. python-数据结构-栈
  4. MySQL数据库:分区Partition
  5. [蓝桥杯][2019年第十届真题]糖果(状压dp)
  6. 利用工厂模式实现怪物系统
  7. Spark+Alluxio性能调优十大技巧
  8. 读取mysql数据到select_MySQL数据库8(十三)高级数据操作之select指令
  9. 《python透明人士,他是凭什么成为主流编程的宠儿?!》python基础语法
  10. cesium 局部加载_cesium自定义气泡窗口infoWindow后续优化篇 - GIS之家
  11. java必学_Java基础系列之初识JAVA
  12. IT人必去的几大网站,国内外知名IT网站罗列!
  13. jQuery Tips(5)----关于伪类选择符
  14. 零基础带你学习MySQL—not null 非空(二十四)
  15. 字节跳动java一共几面_字节跳动Java面经(已offer)
  16. 计算机编辑文档教程,列举Word文档中常用编辑操作
  17. mac分区合并APFS容器
  18. SAP中图文展示分摊和分配的区别
  19. html5类选择器用什么表示,HTML_揭秘常用的五类CSS选择器用法,有许多新手朋友不知道在什么 - phpStudy...
  20. go - rune类型

热门文章

  1. java发牌_Java实现洗牌发牌的方法
  2. java注释html警告,Javadoc中允许的HTML标记
  3. php 抓取 wordpress 文字内容,WordPress获取页面、文章内容代码
  4. 和 对比_Yeezy350V2新灰橙真假对比
  5. 区块链 Fisco bcos 智能合约(17)-区块链的速度困境:“贵”在信任,“慢”得其所
  6. 移动端中 H5输入框在弹起键盘后被遮挡
  7. 基于springboot+vue的公益慈善捐助网站(前后端分离)
  8. mysql+alter+int_MySQL Alter命令
  9. 十二、Object类
  10. 小D课堂 - 新版本微服务springcloud+Docker教程_5-06 高级篇幅之深入源码