Java编程语言提供了继承,多态,封装,抽象等多种方法,让类与类之间的使用和访问更加灵活,并且程序在执行的过程中也更加安全,Java所有的对象都存在于它所属的类,而每个类都有它自身的属性和方法,我们通过对对象的属性和方法的归纳将特定的对象归为一类,我们只需要建立一个类,给这个类定义好对象需要的属性和方法,所有该类对象都可以通过new类来快速使用它需要的属性和方法,从而大大减少代码量,并且让界面更简洁,而且当我们再次需要用到和该类相关的属性和行为时,我们只需要去调用它,相当之方便。

作为一个Java编程的开发程序员另外一件幸福的事就是不需要担心内存不足问题,因为其有着强大的垃圾回收(GC)机制。

此外,其基于半编译(class二进制文件)半解释(每个版本都有针对不同操作系统的解释器)的特性,Java拥有强大的跨平台性,一次编译随处运行,并且,其异常处理机制,让Java代码编写的程序拥有着强大的健壮性。

Java编程技术学习任重而道远,需要时间的沉淀和经验的总结,大家可以根据我总结的技术点扩展到面,再结合项目不断深入学习。

并发处理的广泛应用是使得amdahl定律代替摩尔定律成为计算机性能发展源的根本原因,是人类压榨计算机运算能力的最有力武器。

并发并非一定得用多线程,多进程也可以,不过java里面谈论并发,大多数与线程脱不开关系,因此我们从线程说起,本文主要包含以下内容:。

线程是比进程更轻量级的调度执行单位,在linux里面,线程和进程没有什么区别,唯一的就是在地址空间,线程的切换虚拟内存空间依然是相同的,但是进程切换是不同的。

目前主流的操作系统都提供的线程实现,java则提供的线程实现方法都是native的,因为不同的硬件和操作系统提供线程调度方式并不尽相同,所以java没用采用和平台无关的统一手段来实现。

实现线程的主要3种方式:使用内核线程实现,使用用户线程实现,使用用户线程加轻量级进程混合实现。

程序一般不会直接使用内核线程,而是去使用内核线程的一种高级接口—轻量级进程(LWP),轻量级进程就是我们所讲的线程,这种轻量级进程与内核线程之间1:1的对应关系。

优点:。

内核直接支持,由操作系统内核创建和撤销,内核维护进程及线程的上下文信息以及线程切换,一个内核线程由于I/O操作而阻塞,不会影响其它线程的运行。

缺点:。

1,线程的操作,创建,同步等都需要系统调用,而系统调用代价比较高,需要在用户态和内核态中来回切换。

2,每个轻量级的进程都需要一个内核线程来支持,需要消耗一定的内核资源。

用户线程实现。

用户线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建,同步,调度和管理线程的函数来控制用户线程。

不需要用户态/核心态切换,速度快,操作系统内核不知道多线程的存在,因此一个线程阻塞将使得整个进程(包括它的所有线程)阻塞,使用用户线程实现的程序一般都比较复杂,java曾经用过,不过最后还是放弃了。

优点:。

切换由用户态程序自己控制内核切换,不需要内核干涉,少了进出内核态的消耗。

缺点:。

多核处理器很难讲线程映射到其他处理器上,单线程阻塞会造成该进程阻塞。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。