多线程总结

多线程序:

        如果程序只有一个执行路径,那么该程序就是单线程程序

        如果程序有多条执行路径,那么该程序就是多线程程序

多线程内容:①多线程概述 ②多线程实现方案 ③线程调度和线程控制 ④线程生命周 ⑤线程同步 ⑥死锁 ⑦线程间通信 ⑧定时器的使用

什么是进程?

  就是正在运行的程序。

是系统进行资源分配和调用的独立单位。  每一个进程都有它自己的内存空间和系统资

多进程有什么意义?

就可以在一个时间段内执行多个任务 提高CPU的使用率

问题: 一边玩游戏,一边听音乐是同时进行的吗?不是。因为单CPU在某一个时间点上只能做一件事情 而我们在玩游戏,或者听音乐的时候,是CPU在做 这程序间的高效切换让我们觉得是同时进行的。main方法运行在主线程中。

Java程序的运行原理:有Java命令启动jvm,接着有该进程创建了一个主线程去调用main方法

jvm虚拟机的启动是单线程还是多线程? 多线程。垃圾回收线程也要启动,否则很容易会出现内存溢出

多线程实现方案1:两种方式实现多线程: 方式一:A: 自定义类MyThread继承Thread类

B:MyTyread类里面重写run()? 为什么是run()方法呢? 不是类中的所有代码都需要被多线程执行, java提供了Thread类中的run()用来包含那些被多线程执行代码

C:创建对象

D:启动线程

一般来说,被多线程执行的代码肯定是比较耗时的

为什么调用run()方法是单线程呢?

run()方法直接调用其实就相当于普通的方法调用

面试题:run()和start()的区别?

      run():仅仅是封装被该线程执行的代码,直接调用是普通方法 start():首先启动了线程,然后再由jvm取调用该线程的run()方法

IllegalTreadStateException:非法的线程状态异常为什么?因为这个相当于是my线程被调用了两次,而不是两个线程启动

如何获取线程名字呢? getName()

要获取main方法所在线程对象的名字,怎么办? Thread类提供了一个很好玩的方法: 用法:

public static Tread currentThread(); System.out.println(Thread.currentThread.getName());

线程的调度  ①分度调度模型  ②抢占式调度模型(Java使用的是这个)

Java默认优先级是多少?默认优先级是5。线程优先级的范围是:1~10

如何获取线程对象优先级?          public final int getPriority();返回线程对象的优先级

如何更改线程对象优先级? public final void setPriority(int newPriority);返回线程对象的优先级

线程的控制:

①线程休眠  public static void sleep(long millis)

②线程加入(等待该线程终止) ·public final void join()

③线程礼让(暂停当前正在执行的线程对象,并进行其他线程) ·public static void yield()

④后台线程 ·public final void setDaemon(boolean on)

⑤中断线程 ·public final void stop()(已过时) ·public void interrupt()线程生命周期


面试题:线程的生命周期?

新建:创建线程对象;就绪:有执行资格,没有执行权;运行:有执行资格,有执行权 阻塞:由于一些操作让线程处于了该状态。没有执行资格,没有执行权;死亡:线程对象变成垃圾,等待被回收

多线程的实现方案2:

方式二:实现Runnable接口步骤:

              A:自定义类MyRunnable类实现Runnable接口

              B:重写run()方法

              C:创MyRunnable类的对象

              D:创建Thread类的对象,并把C步骤的对象作为构造参数传递用

方式二设置名字的方法:

方式一:对象名.setName(""); 方式二:Thread  对象=new Thread(接口类对象,"");

方式二有什么好处?A:可以避免由于java单继承带来的局限性B:适合多个相同的代码去处理同一个资源的情况,把线程同程序的代码,数据有效的分离,较好地体现了面对对象的设计思想。

如何解决线程的安全问题?

            要想解决问题,就要知道那些原因会导致出问题:A:是否多线程环境         B:是否有共享数据         C:是否有多条语句操作共享数据(若CPU是原子性操作就不会出现问题)

解决问题方法是:(同步)              代码格式:synchronized(对象){}

解释:将有多条语句的操作包装起来。这个关键在这个对象,因此这个对象只能是一个


同步的特点:

          同步的前提: 多个线程 多个线程使用的是同一个锁对象

          同步的好处: 同步的出现解决了多线程的安全问题 

          同步的弊端: 当线程相当多事,因为每一个线程都会去判断同步上的锁, 这是很耗费资源的,无形中会降低程序的运行效率

静态该方法的锁对象是谁? 类的字节码文件对象(反射会讲)

线程安全的类:StringBuffer()、Vector<String>()、Hashtable<String,String>()22:06 2019/10/12

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,193评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,306评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,130评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,110评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,118评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,085评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,007评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,844评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,283评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,508评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,395评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,985评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,630评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,797评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,653评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,553评论 2 352

推荐阅读更多精彩内容

  • 一、认识多任务、多进程、单线程、多线程 要认识多线程就要从操作系统的原理说起。 以前古老的DOS操作系统(V 6....
    GT921阅读 1,013评论 0 3
  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 2,957评论 1 18
  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 2,454评论 1 15
  • 此片文章主要总结的是Thread类及相关的基础概念和API,首先需要厘清线程调度中的几个基本概念: 一、线程调度的...
    千淘萬漉阅读 2,563评论 0 2
  • 进程 什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内...
    45b645c5912e阅读 469评论 0 5