Java.lang的研究(分析包含的重要类和接口)
Java.lang包是Java中使用最广泛的一个包,它包含很多定义的类和接口。
java.lang包包括以下这些类:
Boolean | Byte | Character | Class | ClassLoader | Compiler | Double | Enum | Float |
InheritableThreadLocal | Integer | Long | Math | Number | Object | Package | Process | ProcessBuilder |
Runtime | RuntimePermission | SecurityManager | Short | StackTraceElement | StrictMath | String | StringBuffer | StringBuilder |
System | Thread | ThreadGroup | ThreadLocal | Throwable | void |
java.lang包括以下这些接口:
Appendalbe | Comparable | Runnable | CharSequence | Iterable | Cloneable | Readable |
1、在Float和Double中提供了isInfinite()和isNaN()方法,用来检验两个特殊的double和float值:无穷值和NaN(非数字)。
2、Process抽象类。抽象的Process类封装了一个进程 process, 即一个执行程序,它主要作为对象类型的超类,该对象由Runtime类中的exec()方法创建,或由ProcessBuilder类中的start()创建。
3、Runtime类。Runtime类封装运行时的环境。一般不能实例化一个Runtime对象,但是可以通过调用静态方法Runtime.getRuntime()得到一个当前Runtime对象的引用。一旦获得当前Runtime对象的引用,就可以调用几个方法来控制Java虚拟机的状态和行为。Runtime类中比较常用的几个方法:
Process exec(String progName) throws IOException 作为一个单独的进程执行progName指定的程序。返回一个描述新进程的Process类的对象。
long freeMemory() 返回Java运行时系统可以利用的空闲内存的近似字节数。
void gc() 开始垃圾回收。
long totalMemory() 返回程序可以利用的类存总字节数。
使用exec()执行其他程序:
package com.hujianjie.demo; public class EcecDemo { /**
* 利用exec()打开指定的程序
*/
public static void main(String[] args) {
Runtime r = Runtime.getRuntime();
Process p = null;
try{
p = r.exec("D:\\Program Files\\Dev-Cpp\\devcpp.exe");
}catch(Exception e){
e.printStackTrace();
System.out.println("Error");
}
} }
4、System类。System类比较常用,其中容易忽略的是currentTimeMillis()方法是为程序执行计时;arraycopy()方法可以迅速从一个地方将任何类型的数组复制到另一个地方,其与等价的循环相比,该方法快很多;getProperty()方法可以得到不同环境变量的值。
5、Runnable接口、Thread和ThreadGroup类支持多线程编程。Runnable接口必须由一个可以启动单独的执行线程的类实现,Runnable接口只定义了一个抽象方法run(),它是线程的入口点,创建线程必须实现该方法。 Thread 类创建一个新的执行线程,它定义了下面常用的构造函数:
Thread()
Thread(Runnable threadOb)
//threadOb是实现Runnable接口的类的一个实例,它定义了线程在何处开始执行
//线程的名称由threadName指定
Thread(Runnable threadOb, String threadName)
Thread(String threadName)
Thread(ThreadGroup groupOb, Runnable threadOb)
Thread(ThreadGroup groupOb, Runnable threadOb, String threadName)
Thread(ThreadGroup groupOb, String threadName)
下面的程序创建了两个具有线程的线程组,演示了线程组的用法:
package com.hujianjie.demo; class NewThread extends Thread{
boolean suspendFlag;
NewThread(String threadname, ThreadGroup tgob){
super(tgob,threadname);
System.out.println("New thread:"+this);
suspendFlag =false;
start();//Start the thread
}
public void run(){
try{
for(int i =6;i>0;i--){
System.out.println(getName()+": "+i);
Thread.sleep(1000);
synchronized(this){
while(suspendFlag){
wait();
}
}
}
}catch(Exception e){
System.out.println("Exception in "+getName());
}
System.out.println(getName()+" exiting.");
}
void mysuspend(){
suspendFlag = true;
}
synchronized void myresume(){
suspendFlag = false ;
notify();
} } public class ThreadGroupDemo { /**
* @param args
*/
public static void main(String[] args) {
ThreadGroup groupA = new ThreadGroup("Group A");
ThreadGroup groupB = new ThreadGroup("Group B");
NewThread ob1 = new NewThread("One",groupA);
NewThread ob2 = new NewThread("Two",groupA);
NewThread ob3 = new NewThread("Three",groupB);
NewThread ob4 = new NewThread("Four",groupB);
System.out.println("\nHere is output from list():");
groupA.list();
groupB.list();
System.out.println();
System.out.println("Suspending Group A");
Thread tga[] = new Thread[groupA.activeCount()];
groupA.enumerate(tga);
for(int i=0;i<tga.length;i++){
((NewThread)tga[i]).mysuspend(); //suspend threads in group
}
try{
Thread.sleep(4000);
}catch(Exception e){
System.out.println("Main thread interrupted.");
}
System.out.println("Resuming Group A");
for(int i=0;i<tga.length;i++){
((NewThread)tga[i]).myresume(); //resume threads in group
}
try{
System.out.println("Waiting for threads to finish.");
ob1.join();
ob2.join();
ob3.join();
ob4.join();
}catch(Exception e){
System.out.println("Exception in Main thread!");
}
System.out.println("Main thread exiting!");
} }
运行的结果如下:
New thread:Thread[One,5,Group A]
New thread:Thread[Two,5,Group A]
One: 6
New thread:Thread[Three,5,Group B]
Two: 6
New thread:Thread[Four,5,Group B]
Three: 6 Here is output from list():
Four: 6
java.lang.ThreadGroup[name=Group A,maxpri=10]
Thread[One,5,Group A]
Thread[Two,5,Group A]
java.lang.ThreadGroup[name=Group B,maxpri=10]
Thread[Three,5,Group B]
Thread[Four,5,Group B] Suspending Group A
Four: 5
Three: 5
Four: 4
Three: 4
Four: 3
Three: 3
Resuming Group A
Two: 5
Waiting for threads to finish.
One: 5
Four: 2
Three: 2
Two: 4
One: 4
Four: 1
Three: 1
Two: 3
One: 3
Four exiting.
Three exiting.
Two: 2
One: 2
Two: 1
One: 1
One exiting.
Two exiting.
Main thread exiting!
Java.lang的研究(分析包含的重要类和接口)的更多相关文章
- java.lang.ArrayIndexOutOfBoundsException异常分析及解决
这是一个非常常见的异常,从名字上看是数组下标越界错误,解决方法就是查看为什么下标越界. 下面是一个错误示例: Exception in thread "main" java.lan ...
- java.lang.ArrayIndexOutOfBoundsException 异常分析及解决
参考:http://blog.csdn.net/javaeeteacher/article/details/4485834 这是一个非常常见的异常,从名字上看是数组下标越界错误,解决方法就是查看为什么 ...
- “java.lang.NullPointerException”异常分析
1.父类定义的某个属性,没有被子类使用,或者在子类中,又重新定义一次. 2.因为调用了一个object的方法,且此object的reference为null:比如说:String a=null; // ...
- java.lang.ExceptionInInitializerError异常分析
今天在项目开发时遇到一个问题,整个项目是使用Spring等框架搭建起来的在运行项目时不报任何的异常信息,就是找不到某个类信息,各方查找该类确实是存在的,最后通过断点跟踪时在异常栈内发现java.lan ...
- java.lang.UnsupportedOperationException 异常分析
今天将一个数组转换成 List 然后进行 remove 操作时却抛出 java.lang.UnsupportedOperationException 异常. String pattern = &quo ...
- 一个”.java”源文件中是否可以包含多个类(不是内部类)?有什么限制
这个是可以的,一个“.java”源文件里面可以包含多个类,但是只允许有一个public类,并且类名必须和文件名一致. 每个编译单元只能有一个public 类.这么做的意思是,每个编译单元只能有一个公开 ...
- java.lang.OutOfMemory总结分析
OOM浅析 相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的探索,终于有了一个比较深入的认识 ...
- 一个“.java”文件中是否可以包含多个类(不是内部类)?有什么限制?
可以,若这个类的修饰符是public则,其类名须与文件名相同.
- 一个".java"源文件中是否可以包含多个类(不是内部类)?有什么限制?
可以,但一个源文件中最多只能有一个公开类(public class)而且文件名必须和公开类的类名完全保持一致.
随机推荐
- am335x 10.1"电容touch 不能识别
/**************************************************************** * am335x 10.1"电容touch 不能识别 * ...
- 本来想用jsonp来跨域请求的,但sb写接口的,不改返回值。。。只得在后台请求接口了。。。
string url = "ssss.com";//demo里的是get请求 HttpWebResponse w = HttpHelper.CreateGetHttpRespons ...
- c++ 向main传递参赛
1.今天写了个批处理文件 准备向main传递参赛 发现在vs2008运行正常 vs2010运行只有首字母 2.需要在项目--属性--常规-字符集里面设置成多字节就好了,以前是unicode 3.因为 ...
- asp.net线程批量导入数据时通过ajax获取执行状态
最近因为工作中遇到一个需求,需要做了一个批量导入功能,但长时间运行没个反馈状态,很容易让人看了心急,产生各种臆想!为了解决心里障碍,写了这么个功能. 通过线程执行导入,并把正在执行的状态存入sessi ...
- Vertex and FragmentShader顶点与片段着色器
一.顶点与片段着色器简介 Vertex and FragmentShader:最强大的Shader类型,也是本系列的重点,下文中简称V&FShader,属于可编程渲染管线.使用的是CG/HLS ...
- 远程数据库备份到本地出现“Access denied for user 'root'@localhost(using password: YES)”的问题
由于另外一个人在用远程的server做测试,导致我访问这个远程机器的mysql提示“too many connections”的问题,于是想到干脆把数据库当下来做测试好了,结果用heidiSQLs进行 ...
- 左连接去重(objec)
需求场景: 1.前端使用的object-table(angularJs) 2.自定义模糊查询 可以模糊查询主表,主表没有数据的时候,可通过字表的(name或者hostname)字段来查询(主-子:一对 ...
- fork函数和vfork函数的区别--19
fork()与vfock()都是创建一个进程,那他们有什么区别呢?总结有以下三点区别: 1. fork ():子进程拷贝父进程的数据段,代码段 vfork ( ):子进程与父进程共享数据段 ...
- ubuntu压缩
.tar解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)-------------------------- ...
- POJ 1243 One Person
题意: 猜数字, 给定 G, L, G 表示可以猜的次数, 每猜一次, G减一, 假如猜的 number 大于 target, L 还需减一, 当 L == -1 或者 G==0 时, 若还没猜中, ...