Java线程的基本用法

摘要

  多线程是软件编程中常用的基本技术,本文主要介绍了Java中线程的基本用法,包括线程创建、运行、停止和暂停,还介绍了线程常用的API以及线程的优先级。通过本文的学习,读者可以掌握线程的基本用法。

一、线程的创建及运行

  线程的创建有三种方式:
  1、继承Thread
  2、实现Runnable
  3、实现Callable

1.1、继承Thread

  线程对象类直接继承Thread类,并重写Thread类的run()方法。如下所示:

public class ThreadTest extends Thread{
	@Override
	public void run() {
		// 执行体代码
	}	
}

  该线程对象的运行,如下所示:

public static void main(String[] args) {
	Thread thread01 = new ThreadTest();
	thread01.start();	
}

1.2、实习Runnable

  Runnable是一个接口,线程对象类可以实现该接口,并重写Runnable接口的run()方法。如下所示:

public class ThreadTest implements Runnable{
	@Override
	public void run() {
		// 执行体代码
	}	
}

  该线程对象的运行,如下所示:

public static void main(String[] args) {
	ThreadTest thread01 = new ThreadTest();
	new Thread(thread01, "Thread-name").start();	
}

1.3、实现Callable

  实现Callable接口的线程,创建过程如下:

  •   1.创建一个线程,创建Callable的实现类Race,并且重写call方法;
  •   2.得到Future对象;
  •   3.获取返回值;
  •   4.停止服务;
//返回Interger类型
public class ThreadTest implements Callable<Integer>{
	@Override
	public Integer call() {
		//执行体代码
		return Integer;
	}
}

  该线程对象的运行,如下所示:

public static void main(String[] args) {
	ExecutorService ser = Executors.newFixedThreadPool(2);		
	ThreadTest threadTest = new ThreadTest();			
	//获取值
	Future<Integer> result = ser.submit(threadTest);
		
	try {
		int numR = result.get();
	} catch (InterruptedException e) {
		e.printStackTrace();
	} catch (ExecutionException e) {
		e.printStackTrace();
	}
		
	//停止服务
	ser.shutdown();
}

1.4、执行run()与start()的区别

  执行run()时,并不会启动该线程,只是相当于调用了一个普通方法。
  执行start()时,启动该线程,start()方法会在该线程中自动调用到run()方法。

二、常用的线程API

2.1、currentThread()方法

  currentThread()方法返回当前代码段所在的线程。
  ThreadTest.java线程文件:

public class ThreadTest implements Runnable{
	public ThreadTest(){
		System.out.println("ThreadTest的构造函数所在线程:"+Thread.currentThread().getName());
	}

	@Override
	public void run(){
		System.out.println("ThreadTest的run函数所在线程:"+Thread.currentThread().getName());
	}
}

  Client.java程序入口文件:

public class Client{
	public static void main(String[] args){
		ThreadTest thread = new ThreadTest();
		thread.start();
	}
}

  运行结果如下:

ThreadTest的构造函数所在线程:main
ThreadTest的run函数所在线程:Thread-0

  由此可见线程类ThreadTest的构造函数是运行在main线程中的,而ThreadTest的run方法才是运行在ThreadTest线程中的。

三、线程的停止

四、线程的暂停

五、线程优先级

发布了21 篇原创文章 · 获赞 0 · 访问量 1825
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章