您好,登录后才能下订单哦!
这篇文章主要介绍“java中关于线程的问题有哪些”,在日常操作中,相信很多人在java中关于线程的问题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java中关于线程的问题有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
1),如何在两个线程之间共享数据。
通过在线程之间共享对象就可以了,然后通过wait/notify/notifyAll, await/signal/signalAll 进行唤起和等待。比方说阻塞队列 BlockingQueue 就是为线程之间共享数据设计的。
2),sleep方法和wait方法的区别。
sleep方法和wait方法都可以用来放弃CPU一定的时间。不同点在于如果线程持有某个对象的监视器,sleep方法不会放弃这个对象的监视器,wait方法会放弃这个对象的监视器。
3),生产者消费者模型的作用是什么。
(1),通过平衡生产者的生成能力和消费者的消费能力来提升整个系统的运行效率,这是生产者消费者模式最重要的作用。
(2),解耦,这是生产者消费者模型附带的作用,解耦意味着生产者和消费者之间的联系少,联系越少越可以独自发展而不需要收到相互的制约。
4), ThreadLocal有什么用 。
ThreadLocal就是一种以空间换时间的做法,在每个Thread里面维护了一个以地址法实现的 ThreadLocal.ThreadLocalMap ,把数据进行隔离,数据不共享,自然就没有线程安全方面的问题了。
5), 为什么wait()方法和notify()/notifyAll()方法要在同步块中被调用 。
这是JDK强制的,wait()方法和notify()/notifyAll()方法在调用前必须先获得对象的锁。
6), wait()方法和notify()/notifyAll()方法在放弃对象监视器时有什么区别 。
wait()方法和notify()/notifyAll()方法在放弃对象监控器的区别在于:wait()方法立即释放对象监视器,notify()/notifyAll()方法则会等待线程剩余代码执行完毕才会放弃对象监视器。
7), 为什么要使用线程池 。
避免频繁地创建和销毁线程。达到线程对象的重用。另外,使用线程池还可以根据项目灵活的控制并发的数目。
8), 怎么检测一个线程是否持有对象监视器 。
Thread类提供了一个holdsLock(Object obj)方法,当且仅当对象obj的监视器被某条线程持有的时候才会返回true,注意这个一个static方法。
9), synchronized和ReentrantLock的区别 。
synchronized是和if、else、for、while一样的关键字,ReentrantLock是类,这是二者的本质区别,既然ReentrantLock是类。它提供了比synchroinized更多更灵活的特性。
(1)ReentrantLock可以对获取锁的等待时间进行设置,这样就避免了死锁
(2)ReentrantLock可以获取各种锁的信息
(3)ReentrantLock可以灵活地实现多路通知
10), ConcurrentHashMap的并发度是什么 ?
ConcurrentHashMap的并发度就是segment的大小,默认为16,这意味着最多同时可以有16条线程操作ConcurrentHashMap ,这也是ConcurrentHashMap对Hashtable的最大优势,
11), ReadWriteLock是什么 ?
ReentrantLock某些时候有局限。加锁,降低了程序的性能。读写锁ReadWriteLock。是一个读写锁接口,读写分离,读锁共享,写锁独占。
12), FutureTask是什么 ?
FutureTask表示一个异步运算的任务。FutureTask里面可以传入一个Callable的具体实现类,可以对这个异步运算的任务的结果进行等待获取、判断是否已经完成、取消任务等操作。当然,由于FutureTask也是Runnable接口的实现类,所以FutureTask也可以放入线程池中。
13), Linux环境下如何查找哪个线程使用CPU最长
(1),获取项目的pid, ps -ef|grep java
(2),top -H -p pid
分布式基础理论-----------------------------------------------------------------------------
1,CAP
分布式领域CAP理论。
1),Consistency,一致性:数据一致性,所有数据变动都是同步的。
2),Availability(可用性),好的响应性能。
3),Partition tolerance:分区容忍性。
在分布式系统中,这三个要素最多只能实现两点,不可能三者兼顾;对于分布式数据系统,分区容忍性是基本要求;对于大多数Web应用,牺牲一致性而换取高可用性,是目前多数分布式数据库产品的方向。
2,Base
1),Basically Available;基本可用,支持分区失败。
2),Soft state 软状态:状态可以有一段时间不同步,异步。
3),Eventually consistent: 最终一致性,最终数据是一致的就可以了,而不是时时一致。
3,NoSQL运动两个核心理论。
1),Google的BigTable
BigTable提出了一种数据模型,将各列数据进行排序存储。数据值按范围分布在多台机器,数据更新操作有严格的一致性保证。
2),Dynamo使用的是另外一种分布式模型。Dynamo的模型更简单,它将数据按key进行hash存储。其数据分片模型有比较强的容灾性,因此它实现的是相对松散的弱一致性:最终一致性。
JAVA I/O中的设计模式
1,适配器模式就是把一个类的接口变换成客户端所能接受的另一个接口。从而使两个接口不匹配而无法在一起工作的两个类能够在一起工作。通常被用在一个项目需要引用一些开源框架来一起工作时,这些框架的内部有一些关于环境信息的接口,需要从外部引用,但是外部的接口不一定能匹配,就需要适配器模式来转换接口。
Java的I/O类库中又许多这样的需求,将字符串转成字节数据保存在文件中,将字节数据变成数据流。具体来说,InputStreamReader和OutputStreamWriter就是适配器的体现。InputStreamReader实现了Reader接口,并且持有InputStream的引用,其作用是将inputStream适配到Reader。源角色就是inputStream代表的实例对象,目标角色就是Reader类。
2,装饰器模式
作用是使得被装饰者功能更强大,而且装饰前后使用方式不变,Java I/O类库中有许多不同功能的组合情况,这些不同的功能组合都是使用装饰器模式实现的。
以FileInputStream为例;
由于 java I/O库需要很多性能的各种组合,如果这些性能都是用继承来实现,那么每一种组合都需要一个类,这样就造成大量行重复的类出现。如果采用装饰模式,那么类的数目就会大大减少,性能的重复也可以减至最少。因此装饰者模式是java I/O库基本模式。装饰者的引进,造成灵活性和复杂性的提高。因此在使用java I/O库时,
Socket 又称 套接字 ,应用程序通过“套接字”向网络发请求,一方挂起电话相当于关闭socket,撤销连接。
一个完整的Socket有一个本地唯一的Socket号。由操作系统分配
Socket是面向客户/服务器模型设计的。Socket利用客户/服务器模式巧妙的解决进程之间建立通信连接问题。
套接字之间连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
1),服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
2),客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务端的套接字。
3),连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求。它就响应客户端套接字的请求,建立一个新的线程。
到此,关于“java中关于线程的问题有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。