DataInputStream类(FilterInputStream类的子类)
与FileInputStream类结合使用读取二进制文件
DataOutputStream类(FilterOutputStream类的子类,FilterOutputStream类继承OutputStream类)
与FileOutputStream类结合使用写二进制文件
ObjectInputStream类(InputStream类的子类)
反序列化则是从特定的流中获取数据重新构建对象的过程
实现步骤:1.实现Serializable接口
2.创建对象输出流
3.调用readObject()方法写入文件
4.关闭对象输出流
ObjectOutputStream类(OutputStream类的子类)
序列化是将对象的状态写入到特定的流中的过程
实现步骤:1.实现Serializable接口
2.创建对象输出流
3.调用writeObject()方法写入文件
4.关闭对象输出流
什么是多线程
如果一个进程中同时运行了多个线程,用来完成不同的工作,则称之为多线程
多线程的好处
1.充分利用CPU的资源
2.简化编程模型
3.带来良好的用户体验
主线程:Thread类
main()方法即为主线程入口
产生其他子线程的线程
必须最后完成执行,因为它执行各种关闭动作
//获取线程的优先级的最大值/最小值/默认值 System.out.println(Thread.MAX_PRIORITY);//10 System.out.println(Thread.MIN_PRIORITY);//1 System.out.println(Thread.NORM_PRIORITY);//5 //获取当前正在运行的线程对象 Thread thread = Thread.currentThread(); //获取当前线程对象的名称 String name =thread.getName(); System.out.println("当前运行线程的名称:"+name);//mian //获取当前线程的id long num = thread.getId(); System.out.println(num);//1 //获取当前线程的优先级 int priorty=thread.getPriority(); System.out.println(priorty);//5 //获取当前线程的状态 State state= thread.getState(); System.out.println(state);//RUNNABLE //设置线程名称 thread.setName("葵花"); System.out.println(thread.getName()); //设置线程优先级 thread.setPriority(8); System.out.println(thread.getPriority()); String str =thread.toString(); System.out.println(str);//Thread[葵花,8,main]
继承Thread类
一个类继承Thread类,需要重写run()方法,创建线程调用start()方法启动线程
//编写线程的第一步:创建MyThread类,继承Thread类 public class MyThread extends Thread { //第二步:重写run方法 @Override public void run() { //第三步:在run()方法中写你想写的代码 for (int i = 1; i <= 10; i++) { System.out.println(Thread.currentThread().getName()+":"+i); } } public static void main(String[] args) { //第四步:创建线程类对象 MyThread mt1 = new MyThread(); MyThread mt2 = new MyThread(); //mt1.run //启动线程要使用start()方法来启动线程,如果通过线程对象直接调用run()方法,那是由主线程调用的,不是多线程的实现方法 mt1.start(); mt2.start();
启动线程要使用start()方法来启动线程,如果通过线程对象直接调用run()方法,那是由主线程调用的,不是多线程的实现方法
多线程并不是真正意义上的并行执行,而是多个线程交替抢占cpu资源,随获取了cpu资源就执行谁,在执行的过程中,有可能丢失cpu资源,被另一个线程执行,所以会出现交替执行的现象
实现Runnable接口创建线程
定义一个类实现Runnable接口,实现run方法,创建对象,调用strat()方法启动线程
//第一步:创建线程类实现Runnable接口 public class MyRunnable implements Runnable { @Override public void run() {//第二步:重写run()方法 for (int i = 1; i <=10; i++) { //第三步:在run()方法中定义要执行的代码 System.out.println(Thread.currentThread().getName()+":"+i); } } public static void main(String[] args) { //创建线程类对象 Runnable mr = new MyRunnable(); // MyRunnable类中没有start()方法,其父类Object类中也没有start()方法,其实现的接口Runnable中只有run()方法,没有start()方法 // mr.start(); Thread thread = new Thread(mr,"葵花点穴瘦"); thread.start(); Thread t1 = new Thread(mr,"排山倒还"); t1.start(); }