一.概述

  进程:正在执行的应用程序

  线程:进程的执行单元,执行路径

  单线程:一个应用程序只有一条执行路径

  多线程:一个应用程序有多条执行路径

二.两种实现方式, 下面为第一种方式: 继承Thread类.

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

  步骤:

    a.自定义类继承Thread类

    b.重写run()方法

      为什么重写run()?

      因为不是类中所有代码都要被线程执行, 为了区分哪些代码需要被执行, java提供了Thread类中的run()方法用来包含那些被线程执行的代码

    c.创建自定义类的对象

    d.启动线程对象

      用run()还是用start()?

      区别:

        run()仅仅是封装被线程执行的方法, 直接调用时属于普通方法;

        start()首先启动了线程, 然后再由jvm去调用该线程的run()方法.

2.getName();setName()获取和设置线程名称

3.线程的两种调度模型:

  分时调度模型: 所有线程轮流使用cpu使用权限, 平均分配每个线程占用cpu的时间.

  抢占式调度模型: 优先让优先级高的线程使用cpu, 如果线程的优先级相同, 则随机选择一个. 优先级高的线程会获得cpu相对较多的时间片(也就是执行权).

  java使用的是抢占式调度模型.

  如何设置和获取线程优先级?

    getPriority();

    setPriority(int priority);

      设置线程优先级1-10: setPriority()

      max  10

      min  1

      默认  5

4.线程API

  sleep(int 毫秒): 线程休眠

  join(): 线程加入, 该线程先执行完, 其他线程才可以执行

  yield(): 线程礼让(可以让多个线程更和谐, 但保证不了轮流一次)

  setDaemon(boolean on): 后台线程(将该线程标记为守护线程或用户线程例如张飞和关羽守护刘备, 当正在运行的线程都是守护线程时, jvm退出. 该方法必须在启动线程前调用即在执行start()方法前执行setDaemon(true)方法)

  stop(): 中断线程(中断过于暴力, 线程不安全, 不建议使用)

  interrupt(): 中断线程(把线程状态终止, 并抛出一个InterruptedException)

    如果线程在调用Object类的wait(), wait(long), 或wait(long, int )方法, 或者该类的join(), jion(long), jion(long, int), sleep(long)或sleep(long, int)方法过程中受阻时, 则其中断状态将被清除, 收到一个InterruptedException.

  详细查看jdk的API文档查Thread.

5.线程生命周期

  新建

  就绪

  运行

    阻塞: sleep()和wait()操作将线程阻塞,sleep()和notify()唤醒线程

  死亡

  

java多线程(一)之继承Thread类的更多相关文章

  1. Java多线程实现......(1,继承Thread类)

    MyThread.java 中的代码: public class MyThread extends Thread{ private int startPrint,printCount; private ...

  2. java学习之- 线程继承Thread类

    标签(空格分隔): 线程 在java.lang包中有个Thread子类,大家可以自行查阅文档,及范例: 如何在自定义的代码中,自定义一个线程呢? 1.通过对api的查找,java已经提供了对线程这类事 ...

  3. Java之同步方法处理继承Thread类的线程安全问题

    /** * 使用同步方法处理继承Thread类的方式中的线程安全问题 * */class Window4 extends Thread { private static int ticket = 10 ...

  4. Java之多线程方式一(继承Thread类)

    /** * 多线程的创建,方式一:继承于Thread类 * 1. 创建一个继承于Thread类的子类 * 2. 重写Thread类的run() --> 将此线程执行的操作声明在run()中 * ...

  5. 【Java多线程系列二】Thread类的方法

    Thread实现Runnable接口并实现了大量实用的方法. /* * 此方法释放CPU,但并不释放已获得的锁,其它就绪的线程将可能得到执行机会,它自己也有可能再次得到执行机会 */ public s ...

  6. java多线程技能-使用多线程-继承Thread类

    /* 使用多线程可通过继承Thread类或实现Runnable接口. Thread和Runnable的关系:public class Thread implements Runnable. 使用thr ...

  7. Java通过继承thread类与实现Runnable接口实现多线程的区别

    Java中线程的创建有两种方式: 1.  通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2.  通过实现Runnable接口,实例化Thread类 一.通过继承T ...

  8. Java基础知识强化之多线程笔记05:Java中继承thread类 与 实现Runnable接口的区别

    1. Java中线程的创建有两种方式:  (1)通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中. (2)通过实现Runnable接口,实例化Thread类. 2. ...

  9. JAVA与多线程开发(线程基础、继承Thread类来定义自己的线程、实现Runnable接口来解决单继承局限性、控制多线程程并发)

    实现线程并发有两种方式:1)继承Thread类:2)实现Runnable接口. 线程基础 1)程序.进程.线程:并行.并发. 2)线程生命周期:创建状态(new一个线程对象).就绪状态(调用该对象的s ...

随机推荐

  1. tomcat启动时间修改

    Server Tomcat v6.0 Server at localhost was unable to start within 45 seconds. If the server requires ...

  2. opencv cuda TK1 TX1 兼容设置

    cmake设置 CUDA_ARCH_BIN 3.2 5.2 CUDA_ARCH_PTX 3.2 5.2 否则报一下错误: OpenCV Error: Gpu API call (NCV Asserti ...

  3. linux 复制目录结构,但不复制文件

    find src -type d | sed 's/src/mkdir -p dst/'|sh

  4. [19] 半球形(Hemisphere)图形的生成算法

    顶点数据的生成 bool YfBuildHemisphereVertices ( Yreal radius, Yuint slices, Yuint stacks, YeOriginPose orig ...

  5. NLP 依存分析

    NLP 依存分析 https://blog.csdn.net/sinat_33741547/article/details/79258045

  6. iOS开发-音乐播放

    现在的各种App大行其道,其实常用也就是围绕着吃喝玩乐基本的需求,视频,音乐在智能手机出现之前更是必不可少的功能,每个手机都会有一个自带的音乐播放器,当然公众也有自己的需求所以也就造就了各种音乐播放软 ...

  7. retrofit okhttp RxJava bk Gson Lambda 综合示例【配置】

    项目地址:https://github.com/baiqiantao/retrofit2_okhttp3_RxJava_butterknife.git <uses-permission andr ...

  8. Android -- VelocityTracker

    VelocityTracker 主要应用于touch event, VelocityTracker通过跟踪一连串事件实时计算出当前的速度. 方法 //获取一个VelocityTracker对象, 用完 ...

  9. Spark踩坑记:共享变量

    收录待用,修改转载已取得腾讯云授权 前言 前面总结的几篇spark踩坑博文中,我总结了自己在使用spark过程当中踩过的一些坑和经验.我们知道Spark是多机器集群部署的,分为Driver/Maste ...

  10. Linux command 系统快捷键

    群里有人问"问个问题,Linux 命令行有没有快捷键一下从行末会到行头?经常敲了很多命令发现忘加 sudo 了,然后把命令删了重新敲一遍". 自己还真不知道怎么操作,只知道历史命令 ...