Java面试题系列之基础部分(七)——每天学5个问题

Java基础部分学习的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io的语法,虚拟机方面的语法,这些都是最基本而且最易问到的,我们只要每天学一点点,日积月累知识面会更广。

网络配图

1、线程同步和异步有何异同,在什么情况下分别使用他们?举例说明。

如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。

当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。

2、多线程有几种实现方法?同步有几种实现方法?

多线程有两种实现方法,分别是继承Thread类与实现Runnable接口;

同步的实现方面有两种,分别是synchronized,wait与notify;

wait():使一个线程处于等待状态,并且释放所持有的对象的lock;

网络配图

sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常;notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级;Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

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

启动一个线程是调用start()方法,使线程就绪状态,以后可以被调度为运行状态,一个线程必须关联一些具体的执行代码,run()方法是该线程所关联的执行代码。

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

分几种情况:

(1)、其他方法前是否加了synchronized关键字,如果没加,则能;

(2)、如果这个方法内部调用了wait,则可以进入其他synchronized方法;

(3)、如果其他个方法都加了synchronized关键字,并且内部没有调用wait,则不能;

(4)、如果其他方法是static,它用的同步锁是当前类的字节码,与非静态的方法不能同步,因为非静态的方法用的是 this。

网络配图

5、线程的基本概念、线程的基本状态以及状态之间的关系

一个程序中可以有多条执行线索同时执行,一个线程就是程序中的一条执行线索,每个线程上都关联有要执行的代码,即可以有多段程序代码同时运行,每个程序至少都有一个线程,即main方法执行的那个线程。

如果只是一个cpu,它怎么能够同时执行多段程序呢?这是从宏观上来看的,cpu一会执行a线索,一会执行b线索,切换时间很快,给人的感觉是a,b在同时执行,好比大家在同一个办公室上网,只有一条链接到外部网线,其实,这条网线一会为a传数据,一会为b传数据,由于切换时间很短暂,所以,大家感觉都在同时上网。

状态:就绪,运行,synchronize阻塞,wait和sleep挂起,结束,wait必须在synchronized内部调用。

调用线程的start方法后线程进入就绪状态,线程调度系统将就绪状态的线程转为运行状态,遇到synchronized语句时,由运行状态转为阻塞,当synchronized获得锁后,由阻塞转为运行,在这种情况可以调用wait方法转为挂起状态,当线程关联的代码执行完后,线程变为结束状态。

原文发布于微信公众号 - Java学习网(javalearns)

原文发表时间:2018-01-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏李鹏的专栏

JAVA 高并发设计

同步和异步通常用来形容一次方法调用,同步方法,调用者必须等到方法调用返回后,才能继续后续的行为,异步方法调用会立即返回,调用者就可以继续后续的操作。

49900
来自专栏Python

数据库连接池,本地线程,上下文管理

一、数据库连接池 flask中是没有ORM的,如果在flask里要连接数据库有两种方式 一:pymysql 二:SQLAlchemy 是pyth...

49660
来自专栏xcywt

《程序员的自我修养》第二章学习笔记

第二章 编译和链接 2.1被隐藏了的过程 我们知道,一个程序由源代码到可执行文件往往由这几步构成: 预处理(Prepressing)-> 编译(Compilat...

20850
来自专栏linux驱动个人学习

解析Linux中的VFS文件系统之文件系统的注册(二)

继上一篇文章:https://cloud.tencent.com/developer/article/1053882 3. 文件系统的注册 这里的文件系统是指可...

36960
来自专栏大内老A

WCF技术剖析之十一:异步操作在WCF中的应用(上篇)

按照操作执行所需的资源类型,我们可以将操作分为CPU绑定型(CPU Bound)操作和I/O绑定型(I/O Bound)操作。对于前者,操作的执行主要利用CPU...

21770
来自专栏hotqin888的专栏

ONLYOFFICE历史版本功能的开发技术之一

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

32520
来自专栏ImportSource

并发系列:从原子更新到CPU锁

原子操作在并发编程中是很重要的概念之一,java中的并发的原子操作和各种锁的实现都少不了CAS的影子,本文从AtomicReferenceFieldUpdate...

54790
来自专栏闻道于事

Linux-看完这篇Linux基本的操作就会了

37630
来自专栏代码世界

Python数据库连接池DBUtils

 如果没有连接池,使用pymysql来连接数据库时,单线程应用完全没有问题,但如果涉及到多线程应用那么就需要加锁,一旦加锁那么连接势必就会排队等待,当请求比较多...

40510
来自专栏大内老A

[WCF权限控制]基于Windows用户组的授权方式[上篇]

Windows用户组安全主体权限模式,顾名思义,就是将利用Windows安全系统将对应的Windows帐号所在的用户组作为该用户权限集的授权方式。认证和授权密不...

21190

扫码关注云+社区

领取腾讯云代金券