【JAVA】基础:线程、IO流、如何打包成可安装 exe 程序

1.线程

进程是一个可以独立运行的程序单位,线程就是一个轻量级的进程。
自定义线程的方法:
1.继承Thread类,重写Thread类中的run方法,创建继承类对象,调用线程的start()方法。
在这里插入图片描述

2.实现Runnable接口,重写run方法,创建实现类对象,创建线程类对象,调用线程的start()方法。
在这里插入图片描述

线程的5种状态:
新建、就绪、运行、阻塞、结束
当我们创建一个线程对象的时候,该线程就进入新建状态,当我们调用线程的start方法,线程进入就绪状态,等待CPU分配时间片运行,当获取到 CPU时间片的时候,代码开始执行,进入运行状态。当运行时候我们调用sleep、join、yeild、join,还有其他一些方式导致改程序暂停运行就进入了阻塞状态,当阻塞结束后又进入就绪状态,然后进入运行状态,程序执行完成后该线程进入结束状态,然后等到CPU回收该内存。
线程方法详解:
1、setPriority(int newPriority)设置线程优先级,我们可以通过此方法设置线程的优先级,优先级越高获取时间片的概率就越大。
2、join() join(long millis) join(long millis, int nanos) ,线程合并,合并外部的线程,然后等待外部线程执行完毕后,在执行当前线程。
3、yield方法,就是线程让行的意思,本来该我获取时间片了,但是我不获取,让给别人去获取,我在获取下一次
4、wait和notify
wait方法:
wait()和wait(timeout) 第一个是一直进入等待状态, 第二个是进入等待状态,到时间自己往下 notify 和我们的wait是组合使用:

synchronized (Account.o) { 
System.out.println(“输入密码”); 
if( Account.balence>=200) { 
System.out.println(name + “取钱200走了”); 
Account.balence -= 200; 
}else { 
System.out.println(name + “余额不足!没法取钱”); 
}

try { 
Account.o.wait(); 
} catch (InterruptedException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
}

while(true) {
1
try { 
Thread.sleep(10000); 
} catch (InterruptedException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 
synchronized (Account.o) { 
Account.o.notify(); 
}

} 

Thread本身提供了一个stop方法,但是这个方法很不安全,我们不推荐使用这个方法,因为一般的线程都是一个循环体, 所以我们通过标志位 来结束循环达到结束线程目的

多线程:
多线程是一个进程中同时有多个线程正在执行。
在一个程序中,有很多操作是非常耗时的,如数据库的读写,IO操作等,如果用单线程就必须把这些操作执行完成后才能进行下面的操作,而用了多线程以后,就可以把这些程序放在后台的继续执行,同时执行其他的操作。可以提高程序的效率。多线程在高并发问题中可以充分利用计算机资源。

线程并发:所谓的线程并发就是当我们多个程序操作同一个资源的时候,会造成资源重复操作。
解决方案就是加锁,synchronized 另外一种方式是队列

类锁:

synchronized (Ren.class) {
            System.out.println("输入密码");
            if( Account.balence>=200) {
                System.out.println(name + "取钱200走了");
                Account.balence -= 200;
            }else {
                System.out.println(name + "余额不足!没法取钱");
            }

            System.out.println("取钱结束,余额为:" + Account.balence);

        }

对象锁:

  public void run() {
            synchronized (Account.o) {
                System.out.println("输入密码");
                if( Account.balence>=200) {
                    System.out.println(name + "取钱200走了");
                    Account.balence -= 200;
                }else {
                    System.out.println(name + "余额不足!没法取钱");
                }
    
                System.out.println("取钱结束,余额为:" + Account.balence);
    
            }
        }

方法锁:

public synchronized void run() {
            System.out.println("输入密码");
            if( Account.balence>=200) {
                System.out.println(name + "取钱200走了");
                Account.balence -= 200;
            }else {
                System.out.println(name + "余额不足!没法取钱");
            }

            System.out.println("取钱结束,余额为:" + Account.balence);
    }

线程异步:所谓的异步就是多个线程同时操作,有可能会操作到同一个资源,这样就会形成我们的资源误操作,这种方式效率高,速度快,不安全,容易资源误操作 。
线程同步:多个线程一起运行,但是后面的线程必须等前面的线程运行完成以后才能运行,效率低下,速度慢,安全。

2.IO流

在这里插入图片描述
IO流技术主要是解决数据存储到硬盘的操作
一种叫做写到硬盘上 : output
一种从硬盘读取::input
IO流就是操作数据的两种方式

输入流,InputStream == >FileInputStream

package com.test.io1;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * 在E盘下   创建文件路径如下  E:/file/src/info.txt;
 * @author Administrator
 */
public class TestIo {

    public static void main(String[] args) {

        //文件输入流
        String num = "0";

        try {
//          FileInputStream fis = new FileInputStream("E:/info.txt");

            File file = new File("E:/info.txt");
            FileInputStream fis = new FileInputStream(file);

            byte b[] = null;
            try {
                System.out.println(fis.available());
                b = new byte[fis.available()];
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            try {
                fis.read(b);
                String s = new String(b);
                System.out.println(s);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

文件夹以及文件的创建类: File(注意需要先创建文件夹再创建文件)

package com.test.io1;

import java.io.File;
import java.io.IOException;

public class TestFile {

    public static void main(String[] args) {
        //创建文件夹
        File file = new File("E:/file/src");
        file.mkdirs();

        //创建文件
        File file2 = new File("e:/file/src/info.txt");
        try {
            file2.createNewFile();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

java对象流,存取对象:
ObjectInputStream、FileOutputStream。 存储的是java的对象形式的数据,前提是该对象的类必须被序列化
public class Map implements Runnable, Serializable{

}

字符串流:
java字符流是Reader、Writer、通过我们查询API发现,该字符串流是无法直接获取硬盘文件的,需要借助我们的字节输入流和字节输出流来进行文件获取,所以代码如下:

try {
            //利用字节流关联文件
            InputStream is = new FileInputStream("e:/a.txt");
            //将字节流套入我们基础字符流
            InputStreamReader isr = new InputStreamReader(is);
            //将基础字符流套入高级字符流
            BufferedReader br = new BufferedReader(isr);

            System.out.println(br.readLine());
        } catch (Exception e) {
            // TODO: handle exception
        }



try {
            OutputStream os = new FileOutputStream("e:/a.txt",true);
            OutputStreamWriter osw = new OutputStreamWriter(os);
            BufferedWriter bw = new BufferedWriter(osw);

            bw.write("张三你好");

            bw.close();
            osw.close();
            os.close();
        } catch (Exception e) {
            // TODO: handle exception
        }

3.如何打包成可安装 exe 程序

第一步:把java文件打包成class文件包,把java工程打包成jar文件

直接利用eclipse完成打包:

项目右键 – export – 依次操作

完成之后我们会得到一个jar文件,这个jar文件就是我们java编译过后的class的压缩包

第二步: 把jar文件打包成可运行的exe。 需要利用exe4j工具。
官网下载地址:https://exe4j.apponic.com/

第三步:把可运行的exe打包成可安装exe,需要利用inno setup软件进行打包,注意,这个然间使用很复杂, 所以操作的时候注意每一步的细节。

猜你喜欢

转载自blog.csdn.net/qq_42755008/article/details/85241803