`
can_do
  • 浏览: 249500 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于Java中的线程

阅读更多
>>概念:
线程是一个程序内部的顺序控制流
==>一个线程代表着程序内的一个顺序控制流

>>线程和进程的比较:
每个进程都有独立的代码和数据空间(进程上下文),进程切换的开销大。
线程:轻量的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小
      ==>对应到JVM中,就是线程有三部分:程序计数器、vmStack、NativeMethodStack,而heap和MethodAreas是所有线程共享的
多进程:在操作系统中能同时运行多个任务(程序)
多线程:在同一应用程序中有多个顺序流同时执行

>>线程的概念模型
1. 虚拟的CPU,由java.lang.Thred类封装和虚拟;
2. CPU所执行的代码,传递给Thread类对象;
3. CPU所处理的数据,传递给Thread类对象;

>>创建线程的两种方式:实现Runnable接口,继承Thread类
比较:
实现Runnable接口
可以将CPU,代码和数据分开,形成清晰的模型;
线程体run()方法所在的类还可以从其他类继承一些有用的属性和方法
有利于保持程序风格的一致性

继承Thread类
Thread子类无法再从其他类继承
编写简单,run()方法的当前对象就是线程对象,可直接操纵

【vip】当一个程序的用户线程全部结束后,即使后台线程的逻辑处理未结束,后台线程也会结束。
==>一个Java进程由用户线程和后台线程构成,当所有的用户线程都结束时,整个Java进程就会退出。


>>线程6种状态:==>体现线程的生命周期
新建=New
可运行=>Runnable
等待 =>Waiting=>线程无限等待下去,需要其他线程调用notifyAll(),
超时等待=>Time-Waiting=>线程等待指定的时间后,就恢复或者尝试获取cpu时间片
阻塞=>Blocked
终止=>Terminated
==>因此分析死锁时,要注意看三种状态:waiting、timed-waiting、blocked,
==>重点看waiting和blocked
==>调用以下方法可导致线程进入waiting状态:Object.wait() || Thread.join() || LockSupport.park() ==>都没有指定具体等待的时间

>>线程优先级:
默认为5,最小为1,最大为10,不提供优先级低的在优先级高的执行结束后执行
==>不保证严格的优先级顺序


>>线程操作方法
线程串行化
join()
线程休眠
sleep()
线程让步
yield() 时间片没用完就让步给其他线程尽早执行,当前线程进入就绪状态
线程的挂起和恢复
线程挂起-暂时停止当前运行中的线程,使之转入阻塞状态,并且不会自动恢复运行。
线程恢复-使得一个已挂起的线程恢复运行
suspend()
resume()


>>临界资源问题
并发线程有机的交替,确保共享的数据在关键的时段被专用
多个线程间共享的数据称为临界资源
在Java语言中,引入了对象互斥锁的概念,来保证共享数据操作的完整性
每个对象都对应于一个可称为“互斥锁”的标记,这个标记用来保证在任何一个时刻,只能有一个线程访问该对象
关键字synchronized来与对象的互斥锁联系。当某个对象用synchronized修饰时,表明该对象在任一时刻只能有一个线程访问
并发运行的多个线程彼此间等待,都无法运行的状态称为线程死锁

>>线程同步通信
为避免死锁,在线程进入阻塞状态时应尽量释放其锁定的资源,以为其他的线程提供运行的机会
wait()
notify()/notifyAll()

>>线程间数据传输
使用管道流
类的同步性与线程安全
************************************************
  • 大小: 64.7 KB
  • 大小: 94 KB
分享到:
评论

相关推荐

    Java的线程和Java AppletJava的线程和Java AppletJava的线程和Java Applet

    Java的线程和Java AppletJava的线程和Java AppletJava的线程和Java AppletJava的线程和Java AppletJava的线程和Java Applet

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

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

    java多线程读取文件

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

    java多线程编程总结

    Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 ...

    Java 模拟线程并发

    Java 模拟线程并发 Java, 模拟线程并发,线程,并发 Java, 模拟线程并发,线程,并发 Java, 模拟线程并发,线程,并发 Java, 模拟线程并发,线程,并发

    java多线程笔记

    三、Java中关于线程的名词解释 3 四、线程的状态转换和生命周期 4 Java线程:创建与启动 7 Java线程:线程名称的设定及获取 10 Java线程:线程栈模型与线程的变量 12 Java线程:线程的调度-休眠 13 Java线程:线程的...

    Java多线程编程总结

    Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-...

    java多线程ppt

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

    线程 JAVA java线程 java线程第3版 java线程第2版第3版合集

    java线程第二版中英文 java线程第二版中英文 线程并不是新的概念:许多操作系统和语言都支持它们。在Java出现以前,似乎人人都在谈论线程,却很少有人使用它。用线程编程是技巧性很强的且不可移植。 而在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 挂起、恢复和终止线程 9.9 计时器线程...

    java多线程经典案例

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

    JAVA单线程多线程

    单线程 单线程 单线程 单线程 单线程 单线程

    Java线程Java线程Java线程Java线程

    Java线程Java线程Java线程Java线程Java线程Java线程

    java 多线程操作数据库

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

    Java线程详解大全

    Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程

    java多线程的讲解和实战

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

    java多线程通信图解

    java 多线程 其实就是每个线程都拥有自己的内存空间,多线程之间的通信,比例A线程修改了主内存(main方法的线程)变量,需要把A线程修改的结果同步到主线程中,这时B线程再从主线程获取该变量的值,这样就实现了...

    java多线程Demo

    自己写的一些多线程的小Demo,在这里与大家分享一下。

    java多线程查询数据库

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

Global site tag (gtag.js) - Google Analytics