`
f51889920
  • 浏览: 37966 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java多线程

阅读更多

进程:是一个正在执行中的程序。每一个进程执行都有一个执行顺序。该顺序是一个执行路径,或者叫一个控制单元。
线程:就是进程中的一个独立的控制单元。线程在控制着进程的执行。一个进程中至少有一个线程。

运行结果每一次都不同:因为多个线程都获取cpu的执行权。cpu执行到谁,谁就运行。明确一点,在某一个时刻,只能有一个程序在运行。(多核除外)cpu在做着快速的切换,已达到看上去是同事运行的效果。我们可以形象把多线程的运行行为在互相抢夺cpu的执行权。
这就是多线程的一个特性:随机性。谁抢到谁执行,至于执行多长时间,没有手动控制前,又cpu说得算。
创建线程的方式:

 继承Thread

  • 定义类继承Thread
  • 复写Thread类中的run方法
  • 目的将自定义的代码存储在run方法中,让线程运行。
  • 调用线程的start方法
  • 该方法两个作用:启动线程,调用run方法。

 实现Runnable

  •  定义类实现Runnable接口
  • 覆盖Runnable接口中的run方法
  • 通过Thread建立线程对象
  • 将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数
  • 调用Thread类的start方法开启线程并调用Runnable接口的子类的run方法
  • 为什么要覆盖run方法:Thread类用于描述线程。该类就定义了一个功能,用于存储线程要运行的代码。该存储功能就是run方法。也就是说Thread类中的run方法,用于存储线程运行的代码。

线程的状态:

  • 被创建
  • 运行
  • start()
  • 阻塞
  • 冻结
  • sleep()
  • wait()
  • 消亡
  • stop()

Thread中常用方法:

  • static Thread.currentThread() 获得当前线程的引用。
  • setName() 设置线程名,getName()获得线程名。
  • Thread和Runnable的区别:
  • Runnable避免了单继承的局限性。

安全性:

  •      同步代码块 synchronized(Object){
  •                        }
  •      哪些操作共有数据,哪些需要同步。
  • 对象如同锁。持有锁的线程可以在同步中执行。没有持有锁的线程即使获取cpu的执行权,也进不去,因为没有获取锁。

同步的前提:

  •   必须要有两个或者两个以上的线程。
  •   必须是多个线程使用同一个锁。

同步的利弊:

  •   解决了多线程的安全问题。
  •   多个线程需要判断锁,较为消耗资源。

死锁:嵌套同步代码锁的时候容易发生,比如两个线程执行时,同步锁嵌套时,所绑定的说不通 当A线程A锁锁定需要运行B锁区域时,B线程B锁已经锁定,所以两个锁都等对方释放锁的时候,导致程序停止教唆死锁。

线程间通讯:就是多个线程在操作同一个资源,但是操作的动作不一样。

  • wait() notify() notifyAll() 都使用在同步中,因为要对持有监视器(锁)的线程操作。所以要使用同步中,因为只有同步才具有锁。
  • 等待和唤醒必须是用一个锁。而锁可以是任意对象,所以可以被任意对象调用的方法定义Object类中。

新特性:

  •      JDK1.5中提供了多线程的升级解决方案。

Lock

  • 将同步synchronized替换成显示Lock操作。 实现类:ReentrantLock,ReentrantReadWriteLock.ReadLock,ReentrantReadWriteLock.WriteLock

  Condition 将Object中的wait,notify,notifyAll替换了Condition对象,该对象可以对锁进行获取。

  •  await() - wait()
  • signal() - notify();
  •   signalAll() - notifyAll();

 

 

分享到:
评论

相关推荐

    Java多线程设计模式上传文件

    Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式...

    java多线程读取文件

    Java多线程读大文件 java多线程写文件:多线程往队列中写入数据

    java多线程ppt

    java多线程PPT 多线程基本概念 创建线程的方式 线程的挂起与唤醒 多线程问题

    java 多线程操作数据库

    一个java 多线程操作数据库应用程序!!!

    java多线程经典案例

    java多线程经典案例,线程同步、线程通信、线程阻塞等经典案例

    Java多线程编程技术

    《Java多线程编程核心技术》建议猿友们读两遍,因为其写得没有那么抽象,第一遍有些概念不是很理解,可以先跳过并记录起来,第一遍阅读的目的主要是了解整个架构。第二遍再慢慢品味,并贯穿全部是指点来思考,并将...

    Java多线程编程实战指南(核心篇)

    Java多线程编程实战指南(核心篇) 高清pdf带目录 随着现代处理器的生产工艺从提升处理器主频频率转向多核化,即在一块芯片上集成多个处理器内核(Core),多核处理器(Multicore Processor)离我们越来越近了――如今...

    Java多线程知识点总结

    该文档总结了Java多线程相关的知识点,分享给大家,简单易懂!

    java多线程的讲解和实战

    详细的讲解了java多线程的原理,并配有代码进行实战,适合java初学者和想对多线程有进一步了解的人。

    java多线程通信图解

    一张图方便理解和掌握java 多线程之间通信的实质 java 多线程 其实就是每个线程都拥有自己的内存空间,多线程之间的通信,比例A线程修改了主内存(main方法的线程)变量,需要把A线程修改的结果同步到主线程中,...

    java多线程处理数据库数据

    java多线程处理数据库数据,使用并发包,无框架,可批量处数据库数据,进行增删改。。等等操作。

    java多线程,对多线程,线程池进行封装,方便使用

    java多线程,对多线程,线程池进行封装,方便使用

    Java多线程编程经验

    现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。 线程是指进程中的一个执行流程,一个进程中可以运行多个线程。...本文档提供Java多线程编程经验,方便广大Java爱好者研究学习Java多线程

    java多线程处理大数据

    java多线程处理大数据,可根据配置的线程数,任务去调度处理

    java多线程并发

    java多线程并发的在新窗口

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制 9.1 Java中的线程 9.2 Thread的子类创建线程 9.3 使用Runable接口 9.4 线程的常用方法 9.5 GUI线程 9.6 线程同步 9.7 在同步方法中使用wait()、notify 和notifyAll()方法 9.8 挂起、恢复和终止线程 ...

    java多线程核心技术

    资深Java专家10年经验总结,全程案例式讲解,首本全面介绍Java多线程编程技术的专著 结合大量实例,全面讲解Java多线程编程中的并发访问、线程间通信、锁等最难突破的核心技术与应用实践 Java多线程无处不在,如...

    java多线程实现大批量数据导入源码

    java多线程实现大批量数据切分成指定份数的数据,然后多线程处理入库或者导出,线程的个数和每份数据的数量都可以控制

    java多线程查询数据库

    java多线程并发查询数据库,使用线程池控制分页,并发查询。

    java多线程模拟队列实现排队叫号

    java多线程模拟队列实现排队叫号,多线程模拟排队叫号取号 java多线程模拟队列实现排队叫号,多线程模拟排队叫号取号

Global site tag (gtag.js) - Google Analytics