摘要:
在前一篇博文《小学徒的成长系列—线程》中,我们已经讲解了关于线程的基本概念及其常用的方法,现在在本次博文中,我们就讲解关于守护线程,同步,及线程池的知识吧。 1.守护线程(后台线程) 在Java中,线程定义有两种: 1> 非守护线程(有些教学书籍喜欢叫做非后台线程) 2> 守护线程(有些教学书籍喜欢叫做后台线程),下面是摘自《Java编程思想》的说法: 所谓后台线程,是指在程序运行的时候在后台提供一种通用服务的线程,并且这种线程并不属于程序中不可或缺的部分,因此,当所有的非后台线程结束时,程序也就终止了,同时会杀死进程中的所有后台线程。反过来说,只要有任何非后台线程还在运行,程序就 阅读全文
摘要:
现在很多面向对象语言中都有了操作线程这个重要的功能,线程能够使复杂的一部代码变得更简单,大大的降低了复杂系统的开发,随着现在处理器数量的发展,充分的利用线程,就能够更好的发挥多处理器系统的强大能力。1.基本概念 1.1线程和进程的关系 在刚开始的时候,操作系统(OS)为了使多个程序能并发执行,从而提高资源利用率和系统吞吐量,从而提出了进程,后来为了减少时空的开销,提高并发性和CPU的利用率,就提出了线程这个概念。 在OS中,其实线程包含于进程内的,一个程序只有一个进程,但是却可以有很多的线程,如图: 从图中,我们也可以很好的知道,进程是操作系统中资源分配的基本单位,而线程只拥有... 阅读全文
摘要:
下面是我在参加2013年腾讯实习生招聘的笔试题目,当然啦,我个人不可能是完全的记住所有题目,部分是摘自网络的。同时,下面也有一些题目我不会的,希望大家一起商量解决给以答案,谢谢。选择题32位机上根据下面的代码,问哪些说法是正确的?() signed char a = 0xe0; unsigned int b = a; unsigned char c = a; A. a>0 && c>0 为真 B. a == c 为真 C. b 的十六进制表示是:0xffffffe0 D.上面都不对答案:C考点:有符号数和无符号数之间的转换解析:将0xe0转换成二... 阅读全文
摘要:
在前面的几篇博文中,我们一起简单的了解jvm的基本知识,例如jvm对字符串的处理等等,或许大家看完后就把这当成一条准则来记住了,但是一些比较好奇的朋友有没有想过,这是为什么呢?他的原理是什么呢?下面就让我们开始一步一步的深入学习。 在这篇博文中呢,我打算主要就讲Java内存区域与内存溢出异常吧。下面言归正传吧。1.Java虚拟机运行时数据区 在前面的几篇博文中,我们只是简单的把内存区域分为了堆和栈,但其实,这种分法是十分粗糙的,jvm在实际运行的时候,内存区域的划分绝对不是那么简简单单的就两块,我们一起看下面这个图就知道了。从上图我们知道了,JVM虚拟机运行时数据区主要划分为:方法区、... 阅读全文
摘要:
什么是HTTP协议协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器目前我们使用的是HTTP/1.1 版本Web服务器,浏览器,代理服务器当我们打开浏览器,在地址栏中输入URL,然后我们就看到了网页。 原理是怎样的呢?实际上我们输入URL后,我们的浏览器给Web服务器发送了一个Request, Web服务器接到Request后进行处理,生成相应的Response,然后发送给浏览器, 浏览器解析Response中的HTML,这样我们就看到了网页,过程如下图所示 阅读全文
摘要:
在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方面工作都是由JVM自动完成的,降低了Java程序员的学习难度,避免了像C/C++直接操作内存的危险。但是,也正因为内存管理完全由JVM负责,所以也使Java很多程序员不再关心内存分配,导致很多程序低效,耗内存。因此就有了Java程序员到最后应该去了解JVM,才能写出更高效,充分利用有限的内存的程序。1.Java在内存中的状态首先我们先写一个代码为例子:Person.java 1 package test; 2 3 import java.io.Serializable; 4 5 public cla... 阅读全文
摘要:
1.Java程序中创建对象的5种常见方式 在讲Jvm对字符串的处理之前,我们先来讲一下,在Java中,最常见的5种创建对象的方式:1)通过关键字new调用构造器创建Java对象,eg :String str = new String("hello");2)通过Class对象的newInstance()方法调用构造器创建Java对象,eg : Class.forName("com.mysql.jdbc.Driver").newInstance();3)通过Java的反序列化机制从IO流中恢复Java对象,eg : 1 package test; 2 3 i 阅读全文
摘要:
1.实例变量和类变量的内存分配类变量 :使用static修饰的成员变量是类变量,属于该类本身实例变量:没有使用static修饰的成员变量是实例变量,属于该类的实例由于同一个JVM内每个类只对应一个Class对象,因此同一个JVM内的一个类的类变量只需一块内存空间。对于实例变量而言,该类每创建一次实例,就需要为实例变量分配一块内存空间,所以,程序中有几个实例,实例变量就需要几块内存空间。2.类变量的初始化时机总是处于实例变量的初始化之前我们先看下下面三段代码:1)因为两个实例变量都是在创建变量的时候才开始分配空间,此时num2还没有分配,所以前向引用就会出现编译错误。1 int num ... 阅读全文
摘要:
几乎所有的程序设计语言都支持数组。Java也不例外。当我们需要多个类型相同的变量的时候,就考虑定义一个数组。在Java中,数组变量是引用类型的变量,同时因为Java是典型的静态语言,因此它的数组也是静态的,所以想要使用就必须先初始化(为数组对象的元素分配空间)。1.数组的初始化方式及其内存分配对于Java数组的初始化,有以下两种方式,这也是面试中经常考到的经典题目:静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组长度,如:1 //只是指定初始值,并没有指定数组的长度,但是系统为自动决定该数组的长度为42 String[] computers = {"Dell& 阅读全文
摘要:
首先,去下载必须的jad.exe和jadeclipse.jar包,可以直接到我的资料共享中下载,网址是:http://l13.yunpan.cn/lk/QEQPab8bn8Zbc资料下载完毕之后,解压,接下来按照以下步骤进行即可。第一步,把下载下来的jad.exe复制到jre的bin目录下,如图第二步,把下载下来的jadeclipse.jar复制到Eclipse安装目录下的plugin目录下第三步,打开Eclipse,然后Windows->Preferences->Java->JadClipse,然后设置Path to decompiler为jad.exe所在目录的全路径,同 阅读全文