一、线程和进程

  每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。

  进程是所有线程的集合,每一个线程是进程中的一条执行路径。

二、为什么使用多线程,哪些场景下使用

  多线程的好处是提高程序的效率。

  主要能体现到多线程提高程序效率。如:迅雷多线程下载、分批发送短信等。。。。

三、多线程创建方式

  1)继承Thread类,重写run方法

    public class ThreadDemos extends Thread {
        public void run() {

  2) 实现Runnable接口,重写run方法

    public class RunnableDemo implements Runnable {
        public void run() {
 3) 使用匿名内部类方式

    Thread thread = new Thread(new Runnable() {
        public void run() {
            //TODO
        }
    });
四、线程启动方式
  开始执行线程是不是调用run方法,而是start方法。调用run方法是使用实例调用方法,不是线程启动。
  而实现Runnable接口的方法,需要new Thread(new
RunnableDemo()).start()。
五、多线程生命周期

  

  线程从创建、运行到结束总是处于下面五个状态之一:新建状态、就绪状态、运行状态、阻塞状态及死亡状态。

  1)新建状态

    当用new操作符创建一个线程时,例如new Thread(r),线程还没有开始运行,此时线程处在新建状态。当一个线程处于新生状态时,程序还没有开始运行线程中的代码。

  2)就绪状态

    一个新创建的线程并不自动开始运行,要执行线程,必须调用线程的start()方法。当线程对象调用start()方法即启动了线程,start()方法创建线程运行的系统资源,并调度线程运行run()方法。当start()方法返回后,线程就处于就绪状态。

  处于就绪状态的线程并不一定立即运行run()方法,线程还必须同其他线程竞争CPU时间,只有获得CPU时间才可以运行线程。因为在单CPU的计算机系统中,不可能同时运行多个线程,一个时刻仅有一个线程处于运行状态。因此此时可能有多个线程处于就绪状态。对多个处于就绪状态的线程是由Java运行时系统的线程调度程序(thread scheduler)来调度的。

  3)运行状态

    当线程获得CPU时间后,它才进入运行状态,真正开始执行run()方法。

  4)阻塞状态

    线程运行过程中,可能由于各种原因进入阻塞状态:
          1>线程通过调用sleep方法进入睡眠状态;
          2>线程调用一个在I/O上被阻塞的操作,即该操作在输入输出操作完成之前不会返回到它的调用者;
          3>线程试图得到一个锁,而该锁正被其他线程持有;
          4>线程在等待某个触发条件。

  5)死亡状态

    有两个原因会导致线程死亡:
       1) run方法正常退出而自然死亡,
       2) 一个未捕获的异常终止了run方法而使线程猝死。
      为了确定线程在当前是否存活着(就是要么是可运行的,要么是被阻塞了),需要使用isAlive方法。如果是可运行或被阻塞,这个方法返回true;如果线程仍旧是new状态且不是可运行的,或者线程死亡了,则返回false。

常用线程api方法

start()

启动线程

currentThread()

获取当前线程对象

getID()

获取当前线程IDThread-编号  该编号从0开始

getName()/setName()

获取当前线程名称/设置线程名称

sleep(long mill)

休眠线程

stop()

停止线程

常用线程构造函数

new Thread()

分配一个新的 Thread对象

new Thread(String name)

分配一个新的 Thread对象,具有指定的 name正如其名。

new Thread(Runable r)

分配一个新的 Thread对象

new Thread(Runable r, String     name)

分配一个新的 Thread对象

六、思考点

  1).进程与线程的区别?
    答:进程是所有线程的集合,每一个线程是进程中的一条执行路径,线程只是一条执行路径。
  2).为什么要用多线程?
    答:提高程序效率
  3).多线程创建方式与启动子线程方法?
    答:继承Thread或实现Runnable 接口。Thread直接利用构造出来的对象调用start()方法。Runnable因为没有继承Thread类,无法调用start方法,需要new Thread(new RunnableDemo()),再调用start方法。
  4).是继承Thread类好还是实现Runnable接口好?
    答:Runnable接口好,因为实现了接口还可以继续继承。继承Thread类不能再继承。
  5).你在哪里用到了多线程?
    答:主要能体现到多线程提高程序效率。
    举例:迅雷多线程下载等。

JAVA多线程-初体验的更多相关文章

  1. JAVA 11初体验

    JAVA 11初体验 随着JAVA没半年发布一次新版本,前几天JAVA 11隆重登场.在JAVA 11中,增加了一些新的特性和api, 同时也删除了一些特性和api,还有一些性能和垃圾回收的改进. 作 ...

  2. java的多线程初体验

    这里以车站售票作为模拟场景,多个票务人员同时出售某一列高铁(G250?)的车票,售票的基本保证有2点: 1.不能售出多于预定限额的车票. 2.不能售出具有相同座位的车票. 初学java,有不当的地方各 ...

  3. Java爬虫初体验

    年关将近,工作上该完成的都差不多了,上午闲着就接触学习了一下爬虫,抽空还把正则表达式复习了,Java的Regex和JS上还是有区别的,JS上的"\w"Java得写成"\\ ...

  4. Java集合初体验

    背景:        因为对Java的集合完全不了解,所以才在网上找了找能形成初步印象的文章进行学习,大多涉及的是一些概念和基础知识. 一.数组array和集合的区别: (1)数组是大小固定的,并且同 ...

  5. java学习初体验之课后习题

    import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { //打印Hel ...

  6. Java单元测试初体验(JUnit4)

    什么是单元测试 我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函数的功能可能很强大,但我们在程序中只用到该函数的一小部分功能,并且经过调试可以确定,这一小部分功能是正确的.但是,我们同时应 ...

  7. java activemq初体验

    1.下载安装ActiveMQ ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Un ...

  8. java学习初体验NO.1

    一.学习目标: 1.理解Java编译原理 在Java编程语言中,所以源代码首先以用.Java扩展名结尾的纯文本件编写,然后,编译器将这些源文件编译成.Class文件.然后,Java启动器工具使用Jav ...

  9. java程序初体验

    示例代码 class Demo { public static void main(String[] args) { System.out.print("hello world") ...

随机推荐

  1. 【转】Js正则表达式

    //校验是否全由数字组成 var patrn=/^[0-9]{1,20}$/ //校验登录名:只能输入5-20个以字母开头.可带数字.“_”.“.”的字串 var patrn=/^[a-zA-Z]{1 ...

  2. Laravel5多图上传和Laravel5单图上传的功能实现

    Laravel5文件上传默认只能上传一张图片,但是有的时候我们需要一次性上传多图就不行了,我在网上看了很多关于laravel5图片上传的文章,很多都只是介绍laravel5单图上传,多图片上传介绍少之 ...

  3. 参观微软Serbia开发中心和Office365 2019-01-31活动感悟

    这是<国外线下技术俱乐部建设>系列文章之一.   该活动网址是:https://www.meetup.com/ITPro-Serbia/events/258352104/ 活动内容是讲Of ...

  4. web前端自动化测试/爬虫利器puppeteer介绍

    web前端自动化测试/爬虫利器puppeteer介绍 Intro Chrome59(linux.macos). Chrome60(windows)之后,Chrome自带headless(无界面)模式很 ...

  5. 测者的性能测试手册:Yourkit 监控JettyYourkit 监控Jetty

    Yourkit是收费工具,每一个email可以免费试用15天,觉得好的朋友可以自行选择购买 服务器端下载yourkit(java) Windows安装yourkit Java Profiler 201 ...

  6. MySQL 基础知识梳理学习(三)----InnoDB日志相关的几个要点

    1.InnoDB的特点 :(1)Fully ACID (InnoDB默认的Repeat Read隔离级别支持):(2)Row-level Locking(支持行锁):(3)Multi-version ...

  7. Jenkins系统监测(转)

    Jenkins系统监测   Jenkins 是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上.同时 Jenkins 能实施监控集成中存在 ...

  8. Saltstack_使用指南07_远程执行-执行模块

    1. 主机规划 远程执行教程文档 https://docs.saltstack.com/en/latest/topics/tutorials/modules.html 所有模块文档 https://d ...

  9. 【Python 24】52周存钱挑战4.0(函数)

    1.案例描述 按照52周存钱法,存钱人必须在一年52周内,每周递存10元.例如,第一周存10元,第二周存20元,第三周存30元,直到第52周存520元. 记录52周后能存多少钱?即10+20+30+. ...

  10. Starting sshd: /var/empty/sshd must be owned by root and not group or world-writable.

    Starting sshd: /var/empty/sshd must be owned by root and not group or world-writable.      [FAILED] ...