`
zhongsw
  • 浏览: 24364 次
文章分类
社区版块
存档分类
最新评论

黑马程序员_Java多线程知识点.

阅读更多

---------------------- android培训java培训 、期待与您交流! ----------------------

 

 

 

 

进程 : 是一个正在执行中的程序 . 每一个进程执行都有一个顺序 . 该顺序是一个路径 , 或者叫一个控制单元 .

线程 : 就是进程中的一个独立的控制单元 , 线程在控制着进程的执行 .

主线程执行 main 方法中的代码 , 自定义的线程执行 run 方法中的代码 .

Thread 类中的 run 方法 , 用于存储线程要运行的代码 .

xx.start();// 开启线程并执行线程中的 run 方法 .

xx.run();// 仅仅是对象调用方法 , 而线程在创建后并没有运行 .

 

创建线程的第一种方法 : 继承 Thread

1.       子类覆盖父类中的 run 方法 , 将线程运行的代码存放在 run .

2.       建立子类对象的同时线程也被创建 .

3.       通过调用 start 方法开启线程 .start 可以开启线程并同时调用 run 方法 .

 

第二种方式 : 实现 Runnable 接口 .

1.       定义类实现 Runnable 接口 .

2.       覆盖 Runnable 接口中的 run 方法 .

3.       通过 Thread 类建立线程对象 .

4.       Runnable 接口的子类对象作为实际参数传递给 Thread 类的构造函数 .

为什么要将 Runnable 接口的子类对象传递给 Thread 的构造函数 .?

因为自定义的 run 方法所属的对象是 Runnable 接口的子类对象 . 所以要让线程去指定指定对象的 run 方法 . 就必须明确该 run 方法所属对象 .

5.       调用 Thread 类的 start 方法开启线程并调用 Runnable 接口子类的 run 方法 .

 

线程由两种实现方式:

第一种方式:

class MyThread extends Thread{

   public void run(){

   需要进行执行的代码,如循环。

}

}

 

public class TestThread{

  main(){

   Thread t1=new Mythread();

   T1.start();

}

}

 

只有等到所有的线程全部结束之后,进程才退出。

 

第二种方式:

Class MyThread  implements Runnable{

  Public  void run(){

}

 

  MyThread target=new MyThread();

  Thread t3=new Thread(target);

  Thread.start();// 启动线程

 

实现方式和继承方式的区别 :

实现方式好处 : 避免了单继承的局限性 , 在定义线程时 , 建议使用实现方式 .

 

解决多线程运行的安全问题 , 用同步代码块 ( 需要锁 ). 也可以同步函数 .

synchronized( 对象 )

{

       需要被同步的代码

}

同步的前提 :

1.       必须要有两个或者两个以上的线程 .

2.       必须是多个线程使用同一个锁 .

 

必须保证同步中只有一个线程在运行 .

 

静态进内在时 , 内在中没有本类对象 , 但是一定有该类对应的字节码文件对象 . 类名 .class

静态的同步方法使用的锁是该方法所在类的字节码文件对象 .

单例设计模式懒汉式的同步 , 该同步所使用的锁是该类的字节码文件 .

 

多线程死锁的发生 . 简单举例二个线程互相要对方的锁能造成死锁 .

 

多线程 , 线程间的通讯

wait:

notify();

notifyAll();

都使用在同步中 , 因为要对持有监视器 ( ) 的线程操作 .

所以要使用在同步中 , 因为只有同步才具有锁 .

 

为什么这些操作线程的方法要定义在 object 类中呢 ?

因为这些方法在操作同步中线程时 , 都必须要标识它们所操作线程只有的锁 , 只有同一个锁上的被等待线程 , 可以被同一个锁上的 notify 唤醒 . 不可以对不同锁中的线程进行唤醒 .

也就是说等待和唤醒必须是同一个锁 .

而锁可以是任意对象 , 所以可以被任意对象调用的方法定义在 object .

 

Lock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作。此实现允许更灵活的结构,可以具有差别很大的属性,可以支持多个相关的 Condition 对象。

 

JDK1.5 后的线程间通讯新特性

作为一个示例,假定有一个绑定的缓冲区,它支持 put take 方法。如果试图在空的缓冲区上执行 take 操作,则在某一个项变得可用之前,线程将一直阻塞;如果试图在满的缓冲区上执行 put 操作,则在有空间变得可用之前,线程将一直阻塞。我们喜欢在单独的等待 set 中保存 put 线程和 take 线程,这样就可以在缓冲区中的项或空间变得可用时利用最佳规划,一次只通知一个线程。可以使用两个 Condition 实例来做到这一点。

  class BoundedBuffer {

   final Lock lock = new ReentrantLock();

   final Condition notFull  = lock.newCondition();

   final Condition notEmpty = lock.newCondition();

 

   final Object[] items = new Object[100];

   int putptr, takeptr, count;

 

   public void put(Object x) throws InterruptedException {

     lock.lock();

     try {

       while (count == items.length)

         notFull.await();

       items[putptr] = x;

       if (++putptr == items.length) putptr = 0;

       ++count;

       notEmpty.signal();

     } finally {

       lock.unlock();

     }

   }

 

   public Object take() throws InterruptedException {

     lock.lock();

     try {

       while (count == 0)

         notEmpty.await();

        Object x = items[takeptr];

       if (++takeptr == items.length) takeptr = 0;

       --count;

       notFull.signal();

       return x;

     } finally {

       lock.unlock();

     }

   }

  }

 

多线程 , 停止线程 .

多线程运行的代码通常是循环结构 , 只要控制循环就可以让 run 方法结束 , 了就是线程结束 .

 

守护线程

  Join 方法 .   xx.setDaemon(true); 

优先级 Thread.yield(); 可以稍微减缓线程的运行 .

 

 

 

 

 

---------------------- android培训java培训 、期待与您交流! ----------------------

分享到:
评论

相关推荐

    01_黑马程序员_张孝祥_Java基础加强_课程价值与目标介绍.zip

    【标题】"01_黑马程序员_张孝祥_Java基础加强_课程价值与目标介绍.zip" 提供的是一门由黑马程序员机构推出的Java基础强化课程,由讲师张孝祥主讲,旨在深入讲解Java编程的基础知识并进行能力提升。 【描述】中提到...

    黑马程序员_张孝祥_Java多线程与并发库 视频+代码+资料

    根据给定文件的信息,我们可以提炼出以下关于Java多线程与并发库的相关知识点: ### Java多线程基础 1. **线程的概念**:在Java中,线程是程序执行流的基本单元。一个标准的Java应用程序至少有一个线程,即主...

    黑马程序员_Java基础辅导班教程课件[第01期]第13天

    在"黑马程序员_Java基础辅导班教程课件[第01期]第13天"中,我们聚焦于Java编程语言的基础知识,这是一门面向初学者的课程,旨在帮助学员快速掌握Java开发的基本技能。第13天的课程通常会涵盖上一天(第12天)所学...

    黑马程序员-java多线程技术01

    本教程将聚焦于Java中的多线程技术,以“黑马程序员-java多线程技术01”为学习起点,探讨如何在Java中实现并管理线程。 首先,我们来理解什么是线程。线程是操作系统分配CPU时间的基本单元,一个进程中可以有多个...

    黑马程序员_(适合初学者入门的Java基础视频)

    Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域占据主导地位。...配合"黑马程序员_(适合初学者入门的Java基础视频).txt"文本资料,学习者还可以查阅相关知识点和代码示例,进一步提高学习效率。

    黑马程序员_Java基础辅导班教程课件[第01期]第10天

    在"黑马程序员_Java基础辅导班教程课件[第01期]第10天"中,我们聚焦于Java编程语言的基础知识,这是一门面向初学者的课程,旨在帮助学员快速掌握Java的核心概念。通过这个阶段的学习,学员将能够理解并运用Java的...

    黑马程序员_Java基础辅导班教程课件[第01期]第4天

    在"黑马程序员_Java基础辅导班教程课件[第01期]第4天"中,我们可以推测这是针对初学者的Java编程课程,旨在帮助学员掌握Java的基础知识。 在课程的第4天,可能讲解了以下核心概念: 1. **类(Class)**:`Demo.class...

    黑马程序员java面试宝典 完整版PDF.rar

    《黑马程序员Java面试宝典》是一本...通过《黑马程序员Java面试宝典》的学习,你可以系统地复习和掌握这些知识点,提高自己的面试竞争力。书中的问题和解答将帮助你更好地理解Java编程的本质,提升在面试中的自信心。

    黑马程序员入学Java精华总结

    ### 黑马程序员入学Java精华总结 #### 一、Java概述与基础知识 1. **何为编程?** - 编程是指通过编写计算机能够理解的指令来解决问题或完成特定任务的过程。这些指令通常被组织成算法,并使用某种编程语言实现。...

    黑马程序员_从零开始征服Android之旅(第一季)源码和笔记

    这份资料涵盖了一系列关键知识点,包括但不限于Android基础、UI设计、数据存储、网络通信、多线程以及性能优化等方面。 首先,Android基础是入门的关键,它涉及到Android系统架构、Android Studio集成开发环境的...

    黑马程序员_毕向东最新经典Java基础视频

    根据提供的文件信息,我们可以推断出这是一套由知名IT教育机构“黑马程序员”出品、由讲师...通过系统地学习这些知识点,并辅以实践操作,将有助于建立起扎实的Java编程基础,为进一步深入学习和职业发展打下良好基础。

    多线程高新(黑马程序员)

    在黑马程序员的课程中,可能涵盖了以上知识点的详细讲解,包括如何创建线程、使用线程池、处理并发异常、调试多线程程序以及相关工具的使用。通过学习这些内容,开发者能够掌握多线程编程的基本技能,提高软件的并发...

    Java基础教程(第3版)_ppt.rar

    6. **Java多线程机制**:"第13章_Java多线程机制.ppt"涵盖了Java的并发编程,包括线程的创建、同步,以及死锁、活锁等概念。 7. **PPT制作者声明**:"PPT制作者声明1.JPG"可能包含了关于教程的版权信息,使用许可或...

    黑马程序员面试宝典(java).7z

    《黑马程序员面试宝典》是针对Java开发人员的一份综合性的面试准备资料,它涵盖了Java全栈开发中的关键知识点,并且特别强调了在面试中可能会遇到的问题和解答。这份资源包含了一份超过500页的企业面试真题集,旨在...

    黑马程序员入学Java知识——精华总结

    "黑马程序员入学Java知识——精华总结"这份文档很可能包含了Java编程的基础到进阶的知识点,旨在帮助初学者快速掌握Java的核心概念和技能。 1. **Java基础知识**:Java是一种面向对象的语言,它的基础包括语法、...

    黑马程序员入学Java知识

    ### 黑马程序员入学Java知识 #### Java概述与基础知识 1. **何为编程?** - 编程是通过特定的计算机语言来编写指令,让计算机能够执行一系列任务的过程。 2. **Java语言概述,历史、特点** - Java是一种广泛...

    黑马程序员入学面试题

    根据给定的文件信息,以下是对相关知识点的详细解析: ### 第一部分知识点 #### 1. 面试大概流程 面试通常分为以下几个步骤: 1. **自我介绍**:介绍自己的基本信息、教育背景、工作经历等。 2. **编程题**:通过...

    黑马程序员java基础试题、笔记

    "黑马程序员java基础试题、笔记"这个压缩包资源为Java初学者和希望加入"黑马程序员"培训课程的学员提供了丰富的学习材料。这些资源包括面试问题合集、整理的资料、Android面试题、学员入学面试总结、面试技巧、必须...

Global site tag (gtag.js) - Google Analytics