Java编程语言提供了继承,多态,封装,抽象等多种方法,让类与类之间的使用和访问更加灵活,并且程序在执行的过程中也更加安全,Java所有的对象都存在于它所属的类,而每个类都有它自身的属性和方法,我们通过对对象的属性和方法的归纳将特定的对象归为一类,我们只需要建立一个类,给这个类定义好对象需要的属性和方法,所有该类对象都可以通过new类来快速使用它需要的属性和方法,从而大大减少代码量,并且让界面更简洁,而且当我们再次需要用到和该类相关的属性和行为时,我们只需要去调用它,相当之方便。
作为一个Java编程的开发程序员另外一件幸福的事就是不需要担心内存不足问题,因为其有着强大的垃圾回收(GC)机制。
此外,其基于半编译(class二进制文件)半解释(每个版本都有针对不同操作系统的解释器)的特性,Java拥有强大的跨平台性,一次编译随处运行,并且,其异常处理机制,让Java代码编写的程序拥有着强大的健壮性。
Java编程技术学习任重而道远,需要时间的沉淀和经验的总结,大家可以根据我总结的技术点扩展到面,再结合项目不断深入学习。
并发处理的广泛应用是使得amdahl定律代替摩尔定律成为计算机性能发展源的根本原因,是人类压榨计算机运算能力的最有力武器。
并发并非一定得用多线程,多进程也可以,不过java里面谈论并发,大多数与线程脱不开关系,因此我们从线程说起,本文主要包含以下内容:。
线程是比进程更轻量级的调度执行单位,在linux里面,线程和进程没有什么区别,唯一的就是在地址空间,线程的切换虚拟内存空间依然是相同的,但是进程切换是不同的。
目前主流的操作系统都提供的线程实现,java则提供的线程实现方法都是native的,因为不同的硬件和操作系统提供线程调度方式并不尽相同,所以java没用采用和平台无关的统一手段来实现。
实现线程的主要3种方式:使用内核线程实现,使用用户线程实现,使用用户线程加轻量级进程混合实现。
程序一般不会直接使用内核线程,而是去使用内核线程的一种高级接口—轻量级进程(LWP),轻量级进程就是我们所讲的线程,这种轻量级进程与内核线程之间1:1的对应关系。
优点:。
内核直接支持,由操作系统内核创建和撤销,内核维护进程及线程的上下文信息以及线程切换,一个内核线程由于I/O操作而阻塞,不会影响其它线程的运行。
缺点:。
1,线程的操作,创建,同步等都需要系统调用,而系统调用代价比较高,需要在用户态和内核态中来回切换。
2,每个轻量级的进程都需要一个内核线程来支持,需要消耗一定的内核资源。
用户线程实现。
用户线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建,同步,调度和管理线程的函数来控制用户线程。
不需要用户态/核心态切换,速度快,操作系统内核不知道多线程的存在,因此一个线程阻塞将使得整个进程(包括它的所有线程)阻塞,使用用户线程实现的程序一般都比较复杂,java曾经用过,不过最后还是放弃了。
优点:。
切换由用户态程序自己控制内核切换,不需要内核干涉,少了进出内核态的消耗。
缺点:。
多核处理器很难讲线程映射到其他处理器上,单线程阻塞会造成该进程阻塞。
评论(0)