JAVA SE基础笔记 (4)

运行时异常:即RuntimeException及其之类的异常。这类异常在代码编写的时候不会被编译器所检测出来,是可以不需要被捕获,但是程序员也可以根据需要(可以改代码,代码严谨后不会出现这种问题。)进行捕获抛出。常见的RUNtimeException有:NullpointException(空指针异常),ClassCastException(类型转换异常),IndexOutOfBoundsException(数组越界异常)等。

编译异常:RuntimeException以外的异常。这类异常在编译时编译器会提示需要捕获,如果不进行捕获则编译错误。常见编译异常有:IOException(流传输异常),SQLException(数据库操作异常)等。

自己处理异常的方法:

try...catch...finally

throws 抛出

IO File类

File的概述:文件和目录路径名的抽象表示形式。(抽象表示形式,未必是真实存在的

构造方法:

public File(String pathname):根据一个路径来得到File对象。

public File(File parent,String child):根据一个File对象和一个目录或文件名来得到一个对象。

public File(String parent,String child):根据一个路径和一个目录或文件名来得到一个对象。

方法:

创建功能:

public boolean createNewFile() throws IOException:创建文件

多线程 什么是多线程

如果程序有多条执行路径,那么该程序就是多线程程序。

进程:可以通过任务管理器查看,是指正在运行的程序。进程是系统进行资源分配和调用的独立单位,每一个进程都有它的内存空间和系统资源。

线程:一个进程中又可以执行多个任务,而这个任务我们可以看作是一个线程。可以把线程看作进行的执行单元。是程序使用cpu的基本单位。

多线程的意义:多线程能满足程序员编写高效率的程序来达到充分利用CPU的目的。

举例:扫雷,迅雷,jvm虚拟机(至少启动了垃圾回收线程和主线程)。

实现多线程程序

如何实现:线程是依赖进程而存在的,所以我们应该先创建一个进程出来。而进程是由系统创建的,java不能调用系统功能,是通过调用c/c++写的程序来创建进程实现多线程的。

实现多线程的两种方式:

继承Thread类,该子类重写run方法,然后创建该类对象,启动线程。代码如下:

package itshuai.com; public class MyThread extends Thread { @Override public void run() { //自己写代码,一般被线程执行的代码肯定是比较耗时的。 for(int i=0;i<=100;i++) { //getname()使用方法 System.out.println(getName()+"---"+i); } } } package itshuai.com; public class MyThreadDemo { public static void main(String[] args) { MyThread my1 = new MyThread(); MyThread my2 = new MyThread(); //run()仅仅是封装被线程执行的代码,start()才是启动线程,然后jvm调用该线程的run()方法。 //更改默认线程名 my1.setName("线程1"); my2.setName("线程2"); //开始启动线程 my1.start(); my2.start(); //获取main所在的线程名 System.out.println(Thread.currentThread().getName()); } }

实现Runnable接口(解决了单继承的局限性;适合多个程序去处理统一资源的情况,只创建了一个对象),自定义类实现接口,实现了run(),创建这个类的对象,最后创建Thread类的对象并将对象作为参数。代码如下:

package itshuai.com; public class MyRunnable implements Runnable { @Override public void run() { for(int i=0;i<=100;i++) { System.out.println(Thread.currentThread().getName()+"---"+i); } } } package itshuai.com; public class MyThreadDemo { public static void main(String[] args) { MyRunnable my = new MyRunnable(); Thread th1 = new Thread(my,"线程1"); Thread th2 = new Thread(my,"线程2"); th1.start(); th2.start(); } } 线程调度

假如计算机只有一个cpu,cpu在某一时刻只能执行一条指令,那线程只有得到cpu的时间片,才能执行指令,

线程调度模型(java使用的是第二种):

分时调度模型(所有线程轮流使用)

抢占式调度模型(优先让优先级高的线程使用cpu)

线程调度的方法(默认为5,最大为10,最低为1):

public final void setPriority(int newPriority)

public final int getPriority()

线程控制

线程控制的方法:

线程睡眠(这个方法在重写的run()里面,单位为毫秒):public static void sleep(long millis) throws InterruptedException

等待这个线程执行完毕再执行其他线程:public final void join() throws InterruptedException

可以在一定程度上让线程轮流执行:public static void yield()

将线程标记为守护线程(在线程调用钱标记,守护线程参数为true,当线程都为守护线程时,jvm会退出线程执行):public final void setDaemon(boolean on)

中断线程(把线程状态中止,并抛出一个异常,然后执行catch语句在接着执行其他语句):public void interrupt()

线程的生命周期

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwzfzs.html