实现多线程的编程语言有哪些?不支持多线程的编程语言有哪些?

Java是如何支持多线程的?

线程安全问题

 

最基本的多线程

多线程并发

 

线程池的概念

NIO的理解和概念

线程同步

线程间通信

线程死锁

线程控制:挂起、停止和恢复

 

 

 

多线程是什么?

JVM是如何实现多线程的?

多线程问题是需要从硬件到操作系统到jvm到用户程序整套体系全部支持,才能实现多线程的功能。

Cpu本身有超线程技术来实现单cpu两个运算通道。比如双核超线程cpu电脑对操作系统来说会识别为4个处理器。

linux操作系统层面来说:实现线程的功能,有从基础到高级的4中模式:内核线程、轻量级线程、用户线程、混合线程(轻量级+用户)。

Jvm实现线程的方式:在windowslinuxSafari上面,是通过调用各个操作系统内核的线程实现的。比如linuxJVM线程跟内核轻量级进程有一一对应的关系,在linux下,只要一个Thread.run就会调用一个fork产生一个线程。

对于计算密集型任务:计算任务会占用大量cpu时间,所以如果线程数量过多,线程切换工作会消耗性能,所以计算密集型不适合线程数太多。

对于io密集型任务:io消耗的cpu资源较少。当一个任务执行IO操作的时候,线程将会被阻塞,处理器立刻会切换到另外一个合适的线程去执行。如果我们只拥有与内核数量一样多的线程,即使我们有任务要执行,他们也不能执行,因为处理器没有可以用来调度的线程。  

如果线程有50%的时间被阻塞,线程的数量就应该是内核数量的2倍。于是我们可以得到下面的线程数量计算公式:

线程数量=内核数量 / 1 - 阻塞率)

我们可以通过相应的分析工具或者javamanagement包来得到阻塞率的数值

 

理解了这些,我们就可以这样认为:jvm线程与操作系统线程紧密结合,所以我们只要关注在jvm线程的实现,便可以实现良好的多线程编程。

 

 

 

Java实现多线程的几种方式

1 继承Thread,实现Runnable接口

 

2

 

多个线程之间的调度和转换

1 主线程等待多个子线程完成

CountDownLatch

 

2 线程的await

 

 

线程之间有嵌套关系吗?Java中线程的树状结构,是否有子线程的子线程。

 

 

线程安全问题

javavolatile

 

 

 

Java里阻塞线程的三种实现方法

https://my.oschina.net/flashsword/blog/114527

 

http://www.cnblogs.com/zhuawang/p/3756151.html

 

http://blog.csdn.net/yellowatumn/article/details/49738551

 

http://lavasoft.blog.51cto.com/62575/27069/

 

http://blog.csdn.net/sadfishsc/article/details/10325879

 

http://ifeve.com/jvm-thread/

 

http://www.importnew.com/12773.html

http://blog.csdn.net/ghsau/article/details/7451464

 

 

 

 

设计模式

多线程

sql优化技术 面试

mysql面试题

并发的面试题

elasticsearch

图书在线阅读系统研究

java的nio

 

 

Javanio避免了java堆和native堆之间来回复制数据

注意jvm的“直接内存

 

 

多线程、阻塞、非阻塞的概念:

多线程的一些模式:master/worker,fulture,生产者/消费者模式

 

ConcurrentMap:  

 

CopyOnWriteArrayList

 

ReentrantLock

 

AtomicInteger