线程
文章平均质量分 83
无关痛痒qaq
菜字辈的coder
展开
-
(Socket、ServerSocket、多线程)模拟文件上传至服务器
之前整理了一篇文件上传下载的博客和线程池相关文章,这次搞一篇使用Socket和ServerSocket结合线程池创建多线程来模拟上传文件至指定服务器。 Client客户端 此篇文章在创建demo的时候不需要额外引入其他依赖,直接Next创建一个Client客户端就可以了。 使用Socket套接字来创建客户端public class UploadClient { public...原创 2019-12-13 14:27:06 · 516 阅读 · 0 评论 -
线程池拒绝策略
上一篇文章中,讲了线程池的基本概念和用法;这篇文章主要说一下当任务队列已满并且线程池中的线程数量达到maximumPoolSize数量之后,还有任务到来,线程池是如何拒绝执行任务的。拒绝策略 还是结合创建线程池的源码来看:public ThreadPoolExecutor(int corePoolSize, int maxim...原创 2019-12-04 15:40:56 · 443 阅读 · 1 评论 -
线程池概念
线程池概念 线程池可以简单的看作是一个“容器”,当我们的程序在第一次启动的时候,就创建多个线程,放到这个容器中,在需要使用线程来执行某个任务的时候,就直接到这个容器中来取一个线程使用,当该任务执行完毕之后,再将此线程回收到容器中,等待下一个被执行的任务来使用。一、线程池出现的背景 以前我们程序中要执行一个任务,需要先new一个线程用来执行这个任务,执行完之后,这个线程也就被销毁了,如...原创 2019-12-04 14:04:48 · 309 阅读 · 0 评论 -
线程通信---等待与唤醒机制
之前有5篇文章,对于线程知识做了一些简单的梳理,这篇文章还是准备以案例实现的形式来记录一下线程之间的通信—等待与唤醒机制。 在了解等待与唤醒机制之前,首先思考一下线程之间为什么需要进行通信? 我们都知道,要想能够去执行一个线程,首先这个线程需要获取CPU的执行权,当这个线程执行完毕之后,就会释放CPU资源,并发执行的时候,剩下的处于就绪状态的线程就会一起去争夺CPU的执行权,谁抢到谁就...原创 2019-12-03 11:01:05 · 354 阅读 · 0 评论 -
Lock锁---实现安全卖票
上一篇文章中:线程安全问题经典案例—卖票,我们使用了synchronized同步代码块来实现了线程安全,这篇文章我们使用Lock锁来实现同样的效果。 Lock锁介绍Lock锁是java jdk1.5版本之后添加一个处理线程安全问题的接口。相比较synchronized而言,更加灵活,因为它不在局限于一个代码块,实现了一些synchronized同步锁所不能实现的功能。JDK1.6 AP...原创 2019-11-29 18:11:19 · 529 阅读 · 1 评论 -
线程安全问题经典案例---卖票
在入门多线程的时候,看到过不少的案例,其中卖票案例尤为经典,在这里自己也记录一下,同时加深对于线程安全的理解: 案例场景情景一: 现在有一个电影院,马上要上映电影《战狼5》,电影院只售票100张,全部通过一个窗口卖出去,那么此种情况则不会出现电影票超卖或者其他任何情况。情景二: 现在电影院装修升级了,新增了两个卖票窗口,1号窗口卖1-30号票,2号窗口卖31-60...原创 2019-11-29 16:11:30 · 831 阅读 · 0 评论 -
线程中的join()方法
1.join() 此方法的作用:让主线程等待子线程执行结束之后再运行。public class Father{ public static void main(String[] args){ try { // 新建“线程t1” Son t1 = new Son("t1"); // 启动“线程t1” t1.start(); // 将“线程t1”加入到“主...原创 2019-12-04 18:23:07 · 380 阅读 · 0 评论 -
线程的生命周期
线程的生命周期可以简单看做是线程的生老病死,首先上图片:New:新建状态我们在类中新创建一个线程的时候,该线程就处于new状态,也就是调用start()方法之前线程所处的状态Runnable:就绪状态就绪状态包括:Ready状态和Running状态,Ready状态表示该线程可以被线程调度器调度执行,而Running状态表示该线程正在被执行,使用Thread.yield(...原创 2019-10-17 23:41:24 · 230 阅读 · 0 评论 -
学习多线程——必会的的9个方法
乱入:定义一个线程可以继承Thread类,也可以实现Runnable接口,但是都需要重写run()方法,在run方法中的异常只能使用try...catch来进行捕获而不能是throw上抛异常。因为重写的run方法没有抛异常。废话不多说,这篇文章里面主要介绍的是学习多线程的过程中必会的几个方法,在这里做个讲解,巩固一下知识点;一、concurrentThread()——获取当前运行的线程...原创 2019-10-16 23:05:15 · 334 阅读 · 0 评论 -
并发、并行、串行概念
使用多线程编程的主要目的是为了在有限的时间内充分利用计算机的处理能力做更多的事情(后文描述更精准)。而线程执行必须要先获取cpu的执行权,只有获取了cpu的执行权的线程才能被执行。了解了线程执行的基础概念之后再看一下什么是并发、并行、串行。并发:在单核CPU中,系统调度只能在同一时间执行一个线程,此时执行的多线程,其实是cpu的控制权在多个线程之间来回快速切换。造成看起来就像是同时执行了多...原创 2019-10-11 16:59:52 · 559 阅读 · 0 评论