多线程基本概念

多线程

什么是程序:为了完成某项特定的任务,使用某种语言,编写一组指令的集合
什么是进程:是一个正在进行的程序
什么是线程:在一个进程中,执行的一套功能流程,称为线程

                   在一个进程中,执行的多套功能流程,称为多线程

多线程程序的优点

1、提高应用程序的响应。对图形化界面更有意义,可增强用户体验。

2、提高计算机系统CPU的利用率改善程序结构。

3、将既长又复杂的进程分为多个线程,独立运行,利于理解和修改

但是当多个线程访问共享变量的时候 会出现线程安全的问题

线程的生命周期

声明线程的几种方法

一 、 创建一个类继承 Thread 类并且重写Thread 类的 run() 方法 

public class MyThread extends Thread{
	//线程执行体
	public void run() {
		for (int i = 0; i < 8; i++) {
			System.out.println(i);
		}
	}
}
public class TestMyThread {
	public static void main(String[] args) throws InterruptedException {
		//我创建的线程
		Thread myThread = new MyThread();
		//执行我的线程体
		myThread.start();

		//下面是主线程
		for (int i = 0; i < 8; i++) {
			Thread.sleep(1);
			System.out.println("haha");
		}
	}
}

打印结果

haha
haha
0
1
2
3
4
5
6
7
haha
haha
haha
haha
haha
haha

二、 创建一个类实现Runnable接口并且实现run方法

public class MyRunnable implements Runnable{
    private List<String> list;
    public MyRunnable (List<String> list){
        this.list = list;
    }
    //线程执行体
    @Override
    public void run(){
	//批量插入
        batchInsertDate(list);
    }
}
public class TestMyRunnable {
    public static void main(String[] args) {
        List<String>  list = new ArrayList<String>();
        //我创建的线程执行体
        MyThread myRunnable = new MyRunnable (list);
        //创建一个线程,并将我的线程执行体传入到线程
        Thread thread = new Thread(myRunnable,"线程的名称" );
        thread.start();
    }
}

三、 创建一个类实现Callable接口并且实现call方法(和Runnable不同的是Callable接口有返回值,Callable实现call方法,Callable接口有异常)启动Runnable接口用new Thread(Runnable runnable).start();

扫描二维码关注公众号,回复: 1118240 查看本文章
public class MyCallable implements Callable<List>{

	@Override
	public List call() throws Exception {
		ArrayList list = new ArrayList<>();
		list.add("1");
		list.add("2");
		list.add("3");
		System.out.println(list);
		return list;
	}
}
public class TestMyCallable {
	public static void main(String[] args) throws InterruptedException, ExecutionException {
		//new Thread(Runnable runnable)但是构造器中不能传入Callable接口
		//FutureTask实现了Runnable接口,可以将实现了Callable接口的类传进FutureTask的构造方法中
		FutureTask futureTask = new FutureTask(new MyCallable());
		new Thread(futureTask).start();

		//利用线程池执行Callable接口,可直接将Callable传给submit方法即可
		//该方法返回call方法的返回值对象Future<T> 并通过Future<T>.get()方法得到返回值
		ExecutorService excu = Executors.newFixedThreadPool(10);
		Future<List> returnValue = excu.submit(new MyCallable());

		System.out.println("返回值:" + returnValue.get());
	}
}

猜你喜欢

转载自blog.csdn.net/wxd_1024/article/details/80492371