城市直播房产教育博客汽车
快传网
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

Java多线程超详解

10月26日 赤雷榭投稿
  程序,进程,线程的基本概念并行与并发:
  程序:是为完成特定任务,用某种语言编写的一组指令的集合,即指一段静态的代码,静态对象。
  进程:是程序的一次执行过程,或是正在运行的一个程序,是一个动态的过程,有它自身的产生,存在和消亡的过程。生命周期
  线程:进程可进一步细化为线程,是一个程序内部的一条执行路径
  即:线程《线程(一个程序可以有多个线程)
  程序:静态的代码进程:动态执行的程序
  线程:进程中要同时干几件事时,每一件事的执行路径成为线程。
  并行:多个CPU同时执行多个任务,比如:多个人同时做不同的事
  并发:一个CPU(采用时间片)同时执行多个任务,比如秒杀平台,多个人做同件事
  线程的相关API
  获取当前线程的名字
  Thread。currentThread()。getName()
  1。start():1。启动当前线程2。调用线程中的run方法
  2。run():通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中
  3。currentThread():静态方法,返回执行当前代码的线程
  4。getName():获取当前线程的名字
  5。setName():设置当前线程的名字
  6。yield():主动释放当前线程的执行权
  7。join():在线程中插入执行另一个线程,该线程被阻塞,直到插入执行的线程完全执行完毕以后,该线程才继续执行下去
  8。stop():过时方法。当执行此方法时,强制结束当前线程。
  9。sleep(longmillitime):线程休眠一段时间
  10。isAlive():判断当前线程是否存活线程的调度
  调度策略:
  时间片:线程的调度采用时间片轮转的方式
  抢占式:高优先级的线程抢占CPU
  Java的调度方法:
  1。对于同优先级的线程组成先进先出队列(先到先服务),使用时间片策略
  2。对高优先级,使用优先调度的抢占式策略线程的优先级
  等级:
  MAXPRIORITY:10
  MINPRIORITY:1
  NORMPRIORITY:5
  方法:
  getPriority():返回线程优先级
  setPriority(intnewPriority):改变线程的优先级
  注意!:高优先级的线程要抢占低优先级的线程的cpu的执行权。但是仅是从概率上来说的,高优先级的线程更有可能被执行。并不意味着只有高优先级的线程执行完以后,低优先级的线程才执行。多线程的创建方式1。方式1:继承于Thread类
  1。创建一个集成于Thread类的子类(通过ctrlo(override)输入run查找run方法)
  2。重写Thread类的run()方法
  3。创建Thread子类的对象
  4。通过此对象调用start()方法2。方式2:实现Runable接口方式
  1。创建一个实现了Runable接口的类
  2。实现类去实现Runnable中的抽象方法:run()
  3。创建实现类的对象
  4。将此对象作为参数传递到Thread类中的构造器中,创建Thread类的对象
  5。通过Thread类的对象调用start()3。新增的两种创建多线程方式1。实现callable接口方式:
  与使用runnable方式相比,callable功能更强大些:
  runnable重写的run方法不如callaalbe的call方法强大,call方法可以有返回值
  方法可以抛出异常
  支持泛型的返回值
  需要借助FutureTask类,比如获取返回结果线程通信方法:
  wait()notify()notifayAll():此三个方法定义在Object类中的,因为这三个方法需要用到锁,而锁是任意对象都能充当的,所以这三个方法定义在Object类中。
  由于wait,notify,以及notifyAll都涉及到与锁相关的操作
  wait(在进入锁住的区域以后阻塞等待,释放锁让别的线程先进来操作)Obj。wait进入Obj这个锁住的区域的线程把锁交出来原地等待通知
  notify(由于有很多锁住的区域,所以需要将区域用锁来标识,也涉及到锁)Obj。notify新线程进入Obj这个区域进行操作并唤醒wait的线程
  有点类似于我要拉粑粑,我先进了厕所关了门,但是发现厕所有牌子写着不能用,于是我把厕所锁给了别人,别人进来拉粑粑还是修厕所不得而知,直到有人通知我厕所好了我再接着用。
  所以wait,notify需要使用在有锁的地方,也就是需要用synchronize关键字来标识的区域,即使用在同步代码块或者同步方法中,且为了保证wait和notify的区域是同一个锁住的区域,需要用锁来标识,也就是锁要相同的对象来充当线程的分类:
  java中的线程分为两类:1。守护线程(如垃圾回收线程,异常处理线程),2。用户线程(如主线程)
  若JVM中都是守护线程,当前JVM将退出。(形象理解,唇亡齿寒)线程的生命周期:
  线程生命周期的阶段描述
  新建当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态
  就绪处于新建状态的线程被start后,将进入线程队列等待CPU时间片,此时它已具备了运行的条件,只是没分配到CPU资源
  运行当就绪的线程被调度并获得CPU资源时,便进入运行状态,run方法定义了线程的操作和功能
  阻塞在某种特殊情况下,被人为挂起或执行输入输出操作时,让出CPU并临时终止自己的执行,进入阻塞状态
  死亡线程完成了它的全部工作或线程被提前强制性地中止或出现异常导致结束线程的同步:在同步代码块中,只能存在一个线程。
  方式一:同步代码块
  使用同步监视器(锁)
  Synchronized(同步监视器){undefined
  需要被同步的代码
  }
  说明:
  操作共享数据的代码(所有线程共享的数据的操作的代码)(视作卫生间区域(所有人共享的厕所)),即为需要共享的代码(同步代码块,在同步代码块中,相当于是一个单线程,效率低)
  共享数据:多个线程共同操作的数据,比如公共厕所就类比共享数据
  同步监视器(俗称:锁):任何一个的对象都可以充当锁。(但是为了可读性一般设置英文成lock)当锁住以后只能有一个线程能进去(要求:多个线程必须要共用同一把锁,比如火车上的厕所,同一个标志表示有人)
  Runable天生共享锁,而Thread中需要用static对象或者this关键字或者当前类(window。class)来充当唯一锁
  方式二:同步方法
  使用同步方法,对方法进行synchronized关键字修饰
  将同步代码块提取出来成为一个方法,用synchronized关键字修饰此方法。
  对于runnable接口实现多线程,只需要将同步方法用synchronized修饰
  而对于继承自Thread方式,需要将同步方法用static和synchronized修饰,因为对象不唯一(锁不唯一)
  总结:1。同步方法仍然涉及到同步监视器,只是不需要我们显示的声明。
  2。非静态的同步方法,同步监视器是this
  静态的同步方法,同步监视器是当前类本身。继承自Thread。class
  方式三:JDK5。0新增的lock锁方法
  classWindowimplementsRunnable{
  privateintticket100;定义一百张票
  1。实例化锁
  privateReentrantLocklocknewReentrantLock();
  Override
  publicvoidrun(){
  while(true){
  2。调用锁定方法lock
  lock。lock();
  if(ticket0){
  try{
  Thread。sleep(100);
  }catch(InterruptedExceptione){
  e。printStackTrace();
  }
  System。out。println(Thread。currentThread()。getName()售出第ticket张票);
  
  }else{
  
  }
  }
  }
  }
  publicclassLockTest{
  publicstaticvoidmain(String〔〕args){
  WindowwnewWindow();
  Threadt1newThread(w);
  Threadt2newThread(w);
  Threadt3newThread(w);
  t1。setName(窗口1);
  t2。setName(窗口1);
  t3。setName(窗口1);
  t1。start();
  t2。start();
  t3。start();
  }
  }总结:Synchronized与lock的异同?
  相同:二者都可以解决线程安全问题
  不同:synchronized机制在执行完相应的代码逻辑以后,自动的释放同步监视器
  lock需要手动的启动同步(lock()),同时结束同步也需要手动的实现(unlock())(同时以为着lock的方式更为灵活)
  优先使用顺序:
  LOCK》同步代码块》同步方法判断线程是否有安全问题,以及如何解决:
  1。先判断是否多线程
  2。再判断是否有共享数据
  3。是否并发的对共享数据进行操作
  4。选择上述三种方法解决线程安全问题线程的死锁问题:
  线程死锁的理解:僵持,谁都不放手,一双筷子,我一只你一只,都等对方放手(死锁,两者都进入阻塞,谁都吃不了饭,进行不了下面吃饭的操作)
投诉 评论 转载

盘点A股被严重低估的3大碳中和龙头股,新能源环卫装备前景可期医药、白酒预期内的大跌,目前医药方向部分标的还是处于高估值状态,消费方向虽说有很多标的已经进入了估值合理区间,但是从股价走势和RPS强度来看,暂时是不值得参与的。今年以来……未来五十年内极有可能实现的两大科学创新将改变整个人类的发展科学技术是第一生产力,科学技术的发展推动了整个人类社会的发展,随着现代社会的进步,科技创新更是以飞快的速度改变着我们的生活。遥想二十年前谁能想到手机居然能成为现在人人离不了的万……万亿宁王再暴跌!新能源赛道持续走低,部分概念股已腰斩一港股飙点蓝字关注,不迷路A股市场今天上午走低,其中创业板指数再次大幅走低,盘中跌逾2,以宁德时代为代表的部分新能源赛道股再次大幅调整,拖累创业板指数走弱。值得注意的是,经……数家美国银行组成财团,推出USDF稳定币数家美国银行宣布将合作推出稳定币计划。周三(12),这些金融机构发布新闻稿宣布USDFConsortium(财团)正式成立,并由身为官方监管机构的美国联邦存款保险公司(FDIC……大数据企业故事贵州六三伍三互联网科技有限公司云端酿出美酒来成立不到3年,将单一的产品卖到了三个亿。而创造这一行业小小奇迹的正是贵阳市花溪区大数据中心溪云小镇的互联网应用型科技企业贵州六三伍三互联网科技有限公司(以下简称六三伍三)。……Java多线程超详解程序,进程,线程的基本概念并行与并发:程序:是为完成特定任务,用某种语言编写的一组指令的集合,即指一段静态的代码,静态对象。进程:是程序的一次执行过程,或是正在运行……1500元以下手机销量榜最低只要599元,无需高昂价格但非常对于国产品牌来说,高端旗舰市场一直都是块难啃的骨头,即便多个品牌在过去两、三年先后进入高端旗舰市场,但从整个高端旗舰市场份额来看,苹果与三星依旧是最大赢家,国产品牌更多集中在千……外卖平台的局,把千万骑手的责任拖累甩了出去当前一篇文章说中国互联网巨头只知道捞钱的时候,有粉丝反对,说了下面的话:我觉得说的挺有道理,但是转念一想,当有人为你送外卖的时候,有人给你开车的时候,可曾想过这些人连基本……电脑老机器消失的售后?客服的牛气,酷比魔方你不能进步点?说到win10的平板,大家的脑海里肯定浮现出了一些品牌,比如联想啊,戴尔啊,小米啊,其实这些品牌人家主打的可不是win10平板,只是附带的,但是附带的产品那售后和他们主打的产品……手机评测2022年02月01日新消息手机评测手机评测2022年02月01日新消息iQOO9标准版大型游戏测评最爽游戏手机?x6手机多少钱x6手机报价评测、参数详情及日常使用硬核实力拜……马云收购的这个彩票公司,为何扭亏为盈赚3。17亿?2016年,马云旗下的阿里巴巴以23。88亿港元收购香港上市彩票公司亚博科技控股(以下简称亚博)50。7的股份,成为大股东。3月22日晚间,亚博发布2018年财报,实现收……vivoXNote曝光7英寸大屏骁龙8旗舰,外观设计独特此前,vivo确认NEX系列正式取消,随后也有消息曝光了vivo旗下的新品规划。按照爆料中提到的信息,vivo旗下有望在下个月带来多款新品迭代。其中可能会覆盖到折叠屏新机……
iPhone14最新CAD外观渲染图曝光,双挖孔设计,边框更试驾小鹏P5跨楼层记忆泊车和高速NGP功能表现如何?互联网存量时代,互联网大厂们面临的两种不同抉择华为路由H6测评五星级组网体验,超大户型全屋千兆WiFi6无想要入华为这样的公司工作,难度有多大?2018java华为面蚂蚁成立SaaS公司国联股份参与创投基金产业互联网周报15万级别100KWh的纯电SUV独此一家直降700元,三星GalaxyA51,是否值得入手?确定iOS14。5。1漏洞可利用,请尽快降级系统孟天广人工智能伦理及其治理要打通科技社群与社会大众崇尚自由的美国,为何一度禁酒?热烈庆祝后海科技与金睿思齐达成合作
免洗护发素的作用是什么还记得仙剑3里的花楹吗?12年过去,如今28岁的她美到认不出生活告诉我20个摄影冷门技巧,你一定要知道!菜导日日谈年终奖放余额宝不划算?给你一个。。。奔波儿灞与灞波儿奔什么意思?与吐蕃人有什么关系?时间小鸟作文倪骏:形容脚踏实地的词语热评聚热点网 智慧停车行业的格局与破局:玩家部分(二)安邦智库2月4日战略预测:警惕区域性信用塌陷风险八方旅人大陆的霸者霸者主视觉图公布权力名声财富齐聚一堂中班节约粮食的教案

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁