`
syoumei
  • 浏览: 48825 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

JAVA线程知识点回顾

    博客分类:
  • Java
阅读更多
Thread
Runnable
lock
deadlock
Synchronized
sleep
wait
blocked
join
blocked
yield
thread-safe
线程生命周期
线程优先级
Java32问里的题目(2006-11-11添加)
第十二,sleep() 和 wait() 有什么区别?
第二十三,启动一个线程是用run()还是start()? 
第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 

守护线程和用户线程(2006-11-13添加)
现在就想到这么多。

 
生命周期
ps:呀呀的网上找不到一张详细点的生命周期状态图,只要自己用pd画了。这图经典没啥好多说的了
得到Running不会一直运行下去,只是得到了时间片,时间一到就回到ready.由图可以看出进入waitting sleeping blocked的thread。如果调用thread的interrupt就可以回到ready

 
Thread join sleep
自己写的例子演示了通过继承Thread实现线程的方法,join和sleep的使用
 

Synchronized lock wait blocked notify Runnable 线程优先级
下面的数据类是O'reilly的例子,线程测试自己写
为了避免在多线程的情况下一个对象被同时操作引起错误,引入了Synchronized和
lock的概念。使用Synchronized对对象或方法设置一个对象锁。先进入同步语句的线程得到对象锁,其他想访问的线程进入blocked state.线程处理完后,打开lock这时由其他处于blocked state的线程进行调度。
用下面的例子来说明,并说明如何通过实现接口来实现线程以及线程的优先级
测试结果1:
Thread A pop starting
Thread C pop starting
Thread B push starting
Thread B push ending
Thread A pop starting
测试结果2
Thread A pop starting
Thread C pop starting
Thread B push starting
Thread A pop starting
Thread B push ending
测试结果3 去掉TestRunnable的注释
Thread C pop starting
Thread B push starting
Thread C pop starting
Thread B push ending
Thread A pop starting
线程1 pop list
线程2 push list
数据类

thread_safe ,deadlock
要safe就要synchronized
除了Vector Hashtable其他集合都没有synchronized方法
可以通过
Collections.synchronizedList(list),
Collections.synchronizedMap(map)
进行同步化封装。
deadlock 就是2个对象互相调用互相锁住,线程全部blocked

sleep() 和 wait() 有什么区别?

网络上流行的回答

sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级,(b)正在运行的线程因为其它原因而阻塞。 

wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到

其实根据线程生命周期来说,进入waiting state,sleeping state后想再运行就必须先进入到ready state,然后根据线程优先级等待进入running.
他们最主要的区别
第一点 wait() notify() notifyAll()都是Ojbect类的方法,每个类都有着方法。
sleep()则是Therad类的方法
第二点。wait()等待时不锁同步对象,这也是它位于Ojbect里面的原因吧。我想。
sleep()等待时锁同步对象。
我写了段代码来证明了
让2个线程操作同一个对象的同步方法。
方法里用分别用sleep和wait进行暂停测试
sleep测试结果 lock
a Run starting 1163206243750
b Run starting 1163206243750
a Run ending 1163206245750
b Run ending 1163206247750
wait测试结果 no lock
a Run starting 1163206314250
b Run starting 1163206314250
a Run ending 1163206316250
b Run ending 1163206316250

启动一个线程是用run()还是start()?

网络上流行的说法

启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。 

线程要运行首先是要进入ready state,这正是start()的作用
run()只是线程要运行的内容。

当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 

网络上流行的说法


  不能,一个对象的一个synchronized方法只能由一个线程访问。

synchronized给一个对象或方法加了锁后,第一个执行它的线程把锁关掉。其他线程就不能访问了。第一个线程执行完毕打开对象锁。然后由对象的monitor通知其他阻塞的线程来访问。
 
 
守护线程和用户线程。
守护线程的设置很简单 setDaemon(true)
2者的区别也很简单。守护线程依赖于创建他的线程,用户线程是独立的
自己写了个简单的例子
有注释的测试结果(User Thread)
strating
1
2
3
4
5
Main Thread Ending
6
7
8
9
(ps:会一直延续下去)
去掉注释的测试结果(daemon)
strating
1
2
3
4
5
Main Thread Ending
6
分享到:
评论

相关推荐

    java知识点回顾

    根据提供的文件信息,我们可以整理出以下关于Java的重要知识点回顾: ### 1. Java 基本数据类型 Java 提供了多种基本数据类型,包括数值型、字符型和布尔型等。 - `byte`: 占用 1 字节,取值范围为 -128 至 127。...

    JAVA核心知识点整理.pdf

    文件《JAVA核心知识点整理.pdf》作为Java程序员面试准备资料,提供了一个全面的Java知识点回顾,涵盖JVM运行机制、多线程编程、集合框架、IO/NIO、类加载机制等内容。这些知识点对于应聘者理解Java技术栈、提升编程...

    java核心知识.pdf

    标题中提到的“java核心知识.pdf”,意味着接下来的内容会围绕Java编程语言的核心知识点展开。Java是一种广泛使用的面向对象的编程语言,具有跨平台、面向对象、分布式、健壮、安全性等特点。它广泛应用于企业级应用...

    Java基础知识PPT

    这个"Java基础知识PPT"可能涵盖了以上提到的一些或所有知识点,深入学习并理解这些内容,将为Java编程打下坚实的基础。无论你是初学者还是有经验的开发者,回顾和巩固基础知识总是有益的。所以,快来下载这份资料,...

    Java并发编程实践(java concurrency in practice)pdf (java多线程总结.ppt)

    配合`JAVA多线程总结.ppt`,你可以得到一个更直观和简洁的概览,快速回顾和掌握上述关键知识点。虽然中文版翻译可能存在不足,但原版英文书籍通常能更准确地传达作者的意图和细节,值得深入阅读。

    java 基础知识总结(经典)

    这篇“Java基础知识总结(经典)”涵盖了Java开发中的核心概念和重要知识点,旨在为初学者和有经验的开发者提供一个全面的回顾。以下是主要的学习点: 1. **Java环境配置**:在开始编程之前,必须安装Java ...

    Java面试知识回顾.zip

    Java作为世界上最受欢迎的编程语言之一,其面试知识点涵盖了广泛的领域,包括基础语法、面向对象、集合框架、多线程、异常处理、IO流、网络编程、设计模式、JVM优化、数据库交互以及Oracle数据库的使用等。...

    Java多线程与并发库高级应用

    本文系统地介绍了Java多线程和并发库的相关知识点,从基本概念到核心工具,再到实际案例的应用。Java多线程技术是现代软件开发中不可或缺的一部分,掌握其高级应用对于提高程序的性能和响应能力至关重要。希望通过对...

    用于回顾java基础知识 Java学习资

    以上这些知识点涵盖了Java基础的大部分内容,如果你正在回顾或学习Java,理解并熟练掌握这些概念至关重要。"java-se-basics-master"这个文件名可能指向一个包含这些基础概念的教程或代码示例库,通过学习和实践其中...

    运用X-mind线性思维对JAVA知识进行归纳

    在IT行业中,Java是一种广泛应用的面向对象的编程语言,它以其跨平台、高性能和丰富的类库赢得了广大...对于有经验的开发者,它也能作为回顾和巩固知识的工具。因此,使用X-mind进行知识归纳是一种有效的学习策略。

    Java后端面试题目回顾,涉及Java,计算机网络,系统,数据库等相关知识点.zip

    Java前后开发面试题,大厂进阶之路,基于JavaGuide、Cyc大佬、牛客...包含计算机网络知识、JavaSE、JVM、Spring、Springboot、SpringCloud、Mybatis、多线程并发、netty、MySQL、MongoDB、Elasticsearch、Redis、HBASE

    java综合知识点总结-必背.zip

    这份“java综合知识点总结-必背.zip”文件很可能是为了帮助Java学习者或开发者整理和回顾核心概念,以便深入理解和应用。以下是根据标题和描述可能包含的一些关键知识点的详细解释: 1. **基础语法**: - 变量:...

    JAVA架构知识库整理 PDF版 查阅方便

    这些是所有Java开发者必须掌握的基础知识,无论你是初学者还是有经验的开发者,回顾和巩固这些基础知识总是有益的。 在面向对象编程方面,该文档可能会深入讨论接口、抽象类、访问修饰符、构造器、异常处理和内省等...

    Java并发与高级特性面试知识点解析

    使用场景及目标:帮助读者系统回顾和强化关于Java语言深层次的知识点和技术能力,提升应聘成功几率。 其他说明:面试题覆盖范围广泛且全面阐述了Java中的并发特性和进阶主题,在加深求职者的专业知识的同时也有助于...

    java面试常见问题回顾

    Java面试常见问题涵盖了许多核心概念和技术,这些都是...以上是Java面试中可能遇到的一些关键知识点,准备面试时,除了理论知识,实践经验也非常重要。通过实际项目或编码练习来巩固这些概念,能够更好地应对面试挑战。

    java复习讲义ppt12讲

    讲义可能包含了以下几个关键知识点: 1. **Java简介**:这部分会介绍Java的历史、发展背景、特点以及它在业界的地位。还会讲解Java的运行机制,如JVM(Java虚拟机)的工作原理和垃圾回收机制。 2. **面向对象编程...

    java开发实战经典习题答案

    Java开发实战经典课后习题答案涉及到Java编程语言的多个基础知识点,这些知识点对于初学者和想要巩固基础的开发者都具有参考价值。以下是对文档中提到的内容的知识点梳理: 1. Java简介 - Java源程序文件的后缀是....

    Java面试宝典2013版pdf

    1. Java基础知识点回顾 Java是一种广泛使用的面向对象的编程语言。它由Sun Microsystems公司在1995年发布。Java具有平台无关性,可以一次编写,到处运行。Java编程语言的设计理念是尽量减少实现上的依赖,从而简化...

    java面试小技巧1

    2. 提供了关于Java基础知识、API解读、异常处理、线程、集合等核心Java知识点的复习指导。 六、Java基础知识回顾 1. 掌握Java基本概念和API的使用,例如String与StringBuffer的区别、集合类的区别等。 2. 理解Java...

Global site tag (gtag.js) - Google Analytics