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的重要知识点回顾: ### 1. Java 基本数据类型 Java 提供了多种基本数据类型,包括数值型、字符型和布尔型等。 - `byte`: 占用 1 字节,取值范围为 -128 至 127。...
文件《JAVA核心知识点整理.pdf》作为Java程序员面试准备资料,提供了一个全面的Java知识点回顾,涵盖JVM运行机制、多线程编程、集合框架、IO/NIO、类加载机制等内容。这些知识点对于应聘者理解Java技术栈、提升编程...
标题中提到的“java核心知识.pdf”,意味着接下来的内容会围绕Java编程语言的核心知识点展开。Java是一种广泛使用的面向对象的编程语言,具有跨平台、面向对象、分布式、健壮、安全性等特点。它广泛应用于企业级应用...
这个"Java基础知识PPT"可能涵盖了以上提到的一些或所有知识点,深入学习并理解这些内容,将为Java编程打下坚实的基础。无论你是初学者还是有经验的开发者,回顾和巩固基础知识总是有益的。所以,快来下载这份资料,...
配合`JAVA多线程总结.ppt`,你可以得到一个更直观和简洁的概览,快速回顾和掌握上述关键知识点。虽然中文版翻译可能存在不足,但原版英文书籍通常能更准确地传达作者的意图和细节,值得深入阅读。
这篇“Java基础知识总结(经典)”涵盖了Java开发中的核心概念和重要知识点,旨在为初学者和有经验的开发者提供一个全面的回顾。以下是主要的学习点: 1. **Java环境配置**:在开始编程之前,必须安装Java ...
Java作为世界上最受欢迎的编程语言之一,其面试知识点涵盖了广泛的领域,包括基础语法、面向对象、集合框架、多线程、异常处理、IO流、网络编程、设计模式、JVM优化、数据库交互以及Oracle数据库的使用等。...
本文系统地介绍了Java多线程和并发库的相关知识点,从基本概念到核心工具,再到实际案例的应用。Java多线程技术是现代软件开发中不可或缺的一部分,掌握其高级应用对于提高程序的性能和响应能力至关重要。希望通过对...
以上这些知识点涵盖了Java基础的大部分内容,如果你正在回顾或学习Java,理解并熟练掌握这些概念至关重要。"java-se-basics-master"这个文件名可能指向一个包含这些基础概念的教程或代码示例库,通过学习和实践其中...
在IT行业中,Java是一种广泛应用的面向对象的编程语言,它以其跨平台、高性能和丰富的类库赢得了广大...对于有经验的开发者,它也能作为回顾和巩固知识的工具。因此,使用X-mind进行知识归纳是一种有效的学习策略。
Java前后开发面试题,大厂进阶之路,基于JavaGuide、Cyc大佬、牛客...包含计算机网络知识、JavaSE、JVM、Spring、Springboot、SpringCloud、Mybatis、多线程并发、netty、MySQL、MongoDB、Elasticsearch、Redis、HBASE
这份“java综合知识点总结-必背.zip”文件很可能是为了帮助Java学习者或开发者整理和回顾核心概念,以便深入理解和应用。以下是根据标题和描述可能包含的一些关键知识点的详细解释: 1. **基础语法**: - 变量:...
这些是所有Java开发者必须掌握的基础知识,无论你是初学者还是有经验的开发者,回顾和巩固这些基础知识总是有益的。 在面向对象编程方面,该文档可能会深入讨论接口、抽象类、访问修饰符、构造器、异常处理和内省等...
使用场景及目标:帮助读者系统回顾和强化关于Java语言深层次的知识点和技术能力,提升应聘成功几率。 其他说明:面试题覆盖范围广泛且全面阐述了Java中的并发特性和进阶主题,在加深求职者的专业知识的同时也有助于...
Java面试常见问题涵盖了许多核心概念和技术,这些都是...以上是Java面试中可能遇到的一些关键知识点,准备面试时,除了理论知识,实践经验也非常重要。通过实际项目或编码练习来巩固这些概念,能够更好地应对面试挑战。
讲义可能包含了以下几个关键知识点: 1. **Java简介**:这部分会介绍Java的历史、发展背景、特点以及它在业界的地位。还会讲解Java的运行机制,如JVM(Java虚拟机)的工作原理和垃圾回收机制。 2. **面向对象编程...
Java开发实战经典课后习题答案涉及到Java编程语言的多个基础知识点,这些知识点对于初学者和想要巩固基础的开发者都具有参考价值。以下是对文档中提到的内容的知识点梳理: 1. Java简介 - Java源程序文件的后缀是....
1. Java基础知识点回顾 Java是一种广泛使用的面向对象的编程语言。它由Sun Microsystems公司在1995年发布。Java具有平台无关性,可以一次编写,到处运行。Java编程语言的设计理念是尽量减少实现上的依赖,从而简化...
2. 提供了关于Java基础知识、API解读、异常处理、线程、集合等核心Java知识点的复习指导。 六、Java基础知识回顾 1. 掌握Java基本概念和API的使用,例如String与StringBuffer的区别、集合类的区别等。 2. 理解Java...