线程的创建

线程

刚刚接触线程这个概念是上学期的操作系统,线程作为进程的组成部分,进程就是程序进入内存运行的名称,可以说,线程对于计算机来说是不可或缺的一部分。、

Java对多线程提供了非常优秀的支持,使之可以通过简便的方式在程序中创建多线程。

多线程的优点:

  1. 多线程之间共享内存,节约系统资源成本
  2. 充分利用CPU,执行并发任务效率高
  3. java内置多线程功能支持,简化了编程的模型
  4. GUI应用通过启动单独线程收集用户界面事件,简化异步事件处理,使GUI界面的交互性更好

Java线程模型有Thread类、Runnable接口、Callable接口和Future接口。

Thread类中run()方法用于执行线程要完成的任务;这个类中还有start()方法用于线程的启动。
Runnable接口中只有一个抽象方法run()方法,用于执行线程中所要完成的任务。
Callable接口中提供了一个call()方法,call()方法对于run()方法来说,它可以有返回值,也可以声明抛出异常。
Future接口则是用来接收Callable接口中call()方法的返回值。

对于每个进程来说,其中必定是包含一个主线程的,该线程是用来执行main()方法的,可以通过Thread类中的currentThread()来获取主线程。

创建线程

在java中有三种可以创建线程的方法

  1. 继承Thread类,重写run()方法,直接创建线程
  2. 实现Runnable接口,再通过Thread类和Runnable的实现类间接创建线程
  3. 使用Callable和Future接口间接创建线程

方法一:

public class ThreadDemo extends Thread{
	public void run(){
		for(int i=0;i<100;i++){
			System.out.println(this.getName()+":"+i);
		}
	}
	public static void main(String[]args}{
		ThreadDemo td=new ThreadDemo();
		td.start();
		for(int i=1000;i<1100;i++){
		System.out.println(Thread.currentThread()+":"+i);
		}
	}
}

start()方法用于对线程的启动,因此不能多次使用。
方法二:

class ThreadTask implements Runnable{
	public void run(){
		for(int i=0;i<100;i++){
			System.out.println(Thread.currentThread().getName()+":"+i);
		}
	}
}
public class RunnableDemo{
	public static void main(String[]args}{
		Thread t=new Thread(new ThreakTask());
		t.start();
		for(int i=1000;i<1100;i++){
		System.out.println(Thread.currentThread().getName()+":"+i);
		}
	}
}

方法三:

class Task implements Callable<Integer>{
	public Integer call() throw Exception{
		int i=0;
		for(;i<100;i++){
			System.out.println(Thread.currentThread().getName()+":"+i);
		}
		return i;
	}
}
public class CallableFutureDemo{
	public static void main(String[]args}{
		FutureTask<Integer> task=new FutureTask<Integer>(new Task());
		new Thread(task,"子线程").start();
		try{
			System.out.println("子线程返回值:"+task.get());
		}catch(InterruptedException e){
			e.printStackTrace();
		}catch(ExceptionException e){
			e.printStackTrace();
		}
		for(int i=1000;i<1100;i++){
		System.out.println(Thread.currentThread().getName()+":"+i);
		}
	}
}

在Java8中,可以直接使用Lambda表达式创建Callable对象

Lambda表达式:
(Callable<Integer>)()->{
	int i=0;
	for(;i<100;i++){
		System.out.println(Thread.currentThread().getName()+":"+i);
	}
	return i;
}

随着科技的发展,知识的进步,线程的创建会更加简单,但是,它的重要性不会因为方法的简单而减少。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值