zoukankan      html  css  js  c++  java
  • Java多线程总结

       在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,更多Java学习,请登陆疯狂java培训官网。

      1.重写线程Thread,Runnable运行的是run方法,当调用线程start()时,会运行其run方法,

      也可以主动去调用,只不过不在同一个线程里。

      当一个线程既继承了Thread又继承Runnable,其thread必须调用target.run()实现对runnable的方法调用。

      2.Object:的三种线程方法 wait() ,notify() ,notifyAll()

      在某个线程里执行某个对象锁的wait方法会暂停该线程的运行,在另外一条线程里利用该锁的notify方法

      可以唤醒某个该对象锁所在的线程;当该对象锁在多个线程里wait的时候,可以使用notifyAll唤醒运行。

      3.线程调度-休眠/优先级/让步/合并/守护线程

      休眠。静态方法Thread.sleep();谁调用谁休眠

      对于优先级高的线程获取CPU机率比较大,并不一定优先级低的运行不了线程的让步含义就是使当前运行着线程让出CPU资源,但是然给谁不知道,仅仅是让出,线程状态回到可运行状态。Thread.yield()

      线程的合并的含义就是将几个并行线程的线程合并为一个单线程执行,应用场景是当一个线程必须等待另一个线程执行完毕才能执行时可以使用join方法。

      调用某个线程的join(),该线程运行完才运行调用它的线程代码。

      守护线程的特征是当setDaemon(boolean on)将该线程标记为守护线程或用户线程。

      当正在运行的线程都是守护线程时,Java 虚拟机退出。

      该方法必须在启动线程前调用。实际上:JRE判断程序是否执行结束的标准是所有的前台执线程行完毕了,而不管后台线程的状态

      4.线程的同步-同步方法/同步块

      在多个线程运行的时候,是否有竞争资源同时改动。应该把竞争资源设为私有,并提供修改方法。可以是对修改方法的同步,也可以对代码块同步。

      同步使用synchronized关键字。

      5.线程池-JAVA5 API

      固定线程池:

      //创建一个可重用固定线程数的线程池 ExecutorService pool =

      Executors.newFixedThreadPool(2);

      //创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。

      ExecutorService pool = Executors.newSingleThreadExecutor();

      //当要加入的池的线程(或者任务)超过池最大尺寸时候,则入此线程池需要排队等待。一旦池中有线程完毕,则排队等待的某个线程会入池执行。

      可变尺寸的线程池:

      //创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。 ExecutorService pool = Executors.newCachedThreadPool();

      延迟连接池:

      //创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。

      ScheduledExecutorService pool = Executors.newScheduledThreadPool(2);

      //pool.execute(t3); //使用延迟执行风格的方法 pool.schedule(t4, 10,

      TimeUnit.MILLISECONDS);

      //单任务延迟线程池:

      //ScheduledExecutorService pool =

      Executors.newSingleThreadScheduledExecutor();

      6.有返回值的线程-JAVA5 API

      线程不再继承runnable借口,而是callable接口并重写call方法。通过线程池submit调用,返回的Future对象,通过get()方法取得返回的对象。

      7.线程锁:-JAVA5 API

      Lock类代替synchronized,在需要同步的代码块里调用lock(),unlock().

      -ReentrantLock

      ReadWriteLock 用于I/0读写。

      -ReentrantReadWriteLock

      8.-JAVA5 API

      //阻塞队列:java.util.concurrent.BlockingQueue继承了Queue接口,且是固定个数的队列,当队列满了,需要继续添加,或者队列没有元素,需要取出时,队列阻塞。

      //阻塞栈:对于阻塞栈,与阻塞队列相似。不同点在于栈是“后入先出”的结构。

      java.util.concurrent.BlockingDeque

      是JAVA6 API中新提出的一个类。

      9.线程调度-JAVA5 API

      通过Lock对象的newCondition()得到Condition对象,并调用其await();signalAll();等。对应了Object中wait();

      notifyAll();

      10.原子量-JAVA5 API

      java.util.concurrent.atomic的使用需要Lock的配合。

      11.障碍器-JAVA5 API

      CyclicBarrier c=CyclicBarrier(等待子线程数, 等待完毕需要执行的Runnable);子线程需要调用c的await().来通知主线程已经完成了子任务。

      疯狂Java培训专注软件开发培训,提升学员就业能力,重点提升实践动手能力。技术知识沉淀深厚的老师,让你感受Java的魅力,激发你对于编程的热爱,让你在半年的时间内掌握8-10万的代码量,掌握Java核心技术,成为真正的技术高手;通过大量全真企业项目疯狂训练,迅速积累项目经验。让你成为技能型的现代化高端人才,迅速获得高薪就业!时间不等人,赶紧联系我们吧!

  • 相关阅读:
    leetcode——33.搜索旋转排序数组
    leetcode——80.删除排序数组中的重复项2
    leetcode——26.删除排序数组中的重复项
    leetcode——18.四数之和
    leetcode——42.接雨水
    leetcode——11.盛最多水的容器
    leetcode——16.最接近的三数之和
    leetcode——15.三数之和
    leetcode——1002.查找常用字符
    004 linux学习:【第4篇】之nginx
  • 原文地址:https://www.cnblogs.com/gojava/p/3186700.html
Copyright © 2011-2022 走看看