随笔分类 -  线程

摘要:1:线程和进程 线程是进程处理的最小单元。进程是线程的集合,一个进程至少包含一个线程。 并发和并行是两个概念,并行是指同一个时刻,多条指令在多个处理器同时执行。而并发是多条指令在同一个处理器快速的轮换执行。 归纳起来来说,操作系统可以同时执行多个任务,这里的每个任务就是一个进程。一个进程可以同时执行 阅读全文
posted @ 2020-05-28 15:25 林就远 阅读(161) 评论(0) 推荐(0)
摘要:1:继承Thread类创建线程类 步骤: (1)线程类继承Thread类,并对Thread类中的run()方法进行重写 (2)创建线程类对象。 (3)调用线程对象的start()方法来启动该线程。 注意:run()方法是线程执行体,但并不是所有线程的执行体都是run()方法。主线程的线程执行体就是m 阅读全文
posted @ 2020-05-28 15:21 林就远 阅读(830) 评论(0) 推荐(0)
摘要:线程的生命周期中有5个状态:创建、就绪、运行、阻塞、死亡。其中从就绪到运行,这两个状态的切换存在不确定因素,需要等待cpu的调度,获取cpu的时间片。 1:新建和就绪状态 当程序使用new关键字创建了一个线程之后,该程序处于创建状态。 当线程调用start()方法之后,该线程处于就绪状态。 注意:启 阅读全文
posted @ 2020-05-28 15:14 林就远 阅读(513) 评论(0) 推荐(0)
摘要:1:线程为什么要同步? 在多线程的情况下,容易造成数据的安全问题。比如取钱操作,涉及到金钱方面的,强烈建议使用线程同步。 线程同步主要有两种方式,一种是synchronized(同步监视器),一个是lock锁。 synchronized synchronized关键字的同步方式: (1)同步代码块( 阅读全文
posted @ 2020-05-28 15:11 林就远 阅读(167) 评论(0) 推荐(0)
摘要:1:传统的线程通信 传统的线程通信是借助wait()、notify()、notifyAll()三个方法的。这三个方法是Object的,并不是Thread方法的。需要注意的是:这三个方法必须由同步监视器对象来调用,这可以分为以下两种情况: (1)对于使用synchronized的同步方法,默认的隐式同 阅读全文
posted @ 2020-05-28 14:52 林就远 阅读(173) 评论(0) 推荐(0)
摘要:1:join线程 线程插队: 控制台输出: 可以看到thread线程在调用了join方法之后,开始进行了“插队”操作,主线程mian要等待thread线程执行完之后再执行。 join()方法有如下三种重载方式(会抛出InterruptedException异常): (1)join():等待被join 阅读全文
posted @ 2020-05-28 14:46 林就远 阅读(231) 评论(0) 推荐(0)
摘要:每次学习线程都是浅尝辄止的状态,这次下定决心是非学到60%入门不可,记录下:2019/11/27 正文: 线程的5个状态: 创建、就绪、运行、阻塞、死亡 线程状态图: 和线程有关的两个方法:start() 和run() start()方法是让线程到可运行状态。run()方法的主体就是线程要执行的方法 阅读全文
posted @ 2020-05-28 14:33 林就远 阅读(150) 评论(0) 推荐(0)
摘要:线程优先级,这是在我学习线程的时候有点疑惑的地方,今天记录一下。 先上代码: 执行结果(注意,每次执行的结果几乎都会与上次不一样): 恩?这就很意外了呀?为啥?我明明设置了thread3线程优先级最高呀,为啥是第二个执行的,而thread1的优先级却只有1而是最高执行的? 原来在线程中有一个很重要的 阅读全文
posted @ 2020-05-28 14:31 林就远 阅读(246) 评论(0) 推荐(0)
摘要:线程的创建方式: 1:通过继承Thread类来创建线程。 2:通过实现Runnable接口来创建线程。 然后在Main方法里分别创建通过继承Thread类和实现Runnable接口的线程,如下图: 我们可以看见:通过继承Thread类的创建线程是直接new 一个对象的。而通过实现接口的是new 一个 阅读全文
posted @ 2020-05-28 14:25 林就远 阅读(161) 评论(0) 推荐(0)
摘要:1:继承Thread类的创建线程 (1)实例变量 运行结果: 从上图可以看出,A线程和B线程各执行5次,得出:由继承Thread类创建的线程,实例变量并不共享。 (2)类变量(静态变量) 运行结果: 从上图可以看出,A和B总共执行了5次,得出:由继承Thread类创建的线程,类变量共享。 2:实现R 阅读全文
posted @ 2020-05-28 14:20 林就远 阅读(399) 评论(0) 推荐(0)
摘要:(本文中的全部观点,仅代表个人观点) 主线程、用户线程、守护线程的区分: 主线程:一个进程只有一个主线程(Main),其他都是子线程。(重点:个人认为主线程也是用户线程!!!) 用户线程:非守护线程(这个解释有点......废话) 守护线程:与系统,程序共存亡的线程就是守护线程。最常见的就是GC垃圾 阅读全文
posted @ 2020-05-26 10:01 林就远 阅读(235) 评论(0) 推荐(0)
摘要:1:notify() 作用:唤醒一个在对象上等待的线程,使其从wait()方法返回,而返回的前提是该线程获取到了对象的锁。 2:notifyAll() 作用:唤醒所有等待在该对象上的线程。 3:wait() 作用:调用该方法的线程进入WAITING状态,只有等待另外线程的通知或被中断才会返回,需要注 阅读全文
posted @ 2020-05-26 10:00 林就远 阅读(362) 评论(0) 推荐(0)
摘要:线程中的重要概念: 并发:单个cpu通过cpu调度算法来回切换不同的任务,让用户看上去这些任务是同时执行的,其实是有先后顺序的,这是逻辑上的同时。“假并发” 并行:多个cpu或物理主机处理多个任务,这是物理上的同时。也是真正的“并发” 一图读懂并发并行: 线程安全:由于java的多线程是一种并发编程 阅读全文
posted @ 2020-05-26 09:59 林就远 阅读(175) 评论(0) 推荐(0)
摘要:1:isAlive() 作用:判断当前的线程是否处于活动状态 活动状态是指线程已经启动且尚未终止,线程处于正在运行或准备开始运行的状态,就认为线程是存活的线程活动状态返回true,否则返回false; 2:setDameon(boolean boo) 作用:设置守护线程,boo为true是守护线程, 阅读全文
posted @ 2020-05-26 09:54 林就远 阅读(138) 评论(0) 推荐(0)