创建线程的方式三种:
1 package cn.crxy.newThread; 2 3 import java.util.concurrent.Callable; 4 import java.util.concurrent.ExecutionException; 5 import java.util.concurrent.FutureTask; 6 7 public class NewThreadDemo { 8 9 public static void main(String[] args) throws InterruptedException, ExecutionException { 10 //第一种方式 11 Thread t1 = new Thread(){ 12 13 @Override 14 public void run() { 15 System.out.println("new Thread 1");//输出:new Thread 1 16 } 17 };//创建线程 18 19 t1.start();//启动线程 20 System.out.println(t1.getName());//输出:Thread-0 21 22 //第二种方式 23 Thread t2 = new Thread(new Runnable() { 24 25 @Override 26 public void run() { 27 System.out.println("new Thread 2");//输出:new Thread 2 28 } 29 }); 30 31 t2.start(); 32 33 System.out.println(Thread.currentThread().getName());//输出:main 34 35 36 //第三种方式 37 FutureTask<String> ft = new FutureTask<String>(new Callable<String>() { 38 39 @Override 40 public String call() throws Exception { 41 System.out.println("new Thread 3");//输出:new Thread 3 42 return "aaaa"; 43 } 44 }); 45 46 Thread t3 = new Thread(ft); 47 t3.start(); 48 String result = ft.get(); 49 System.out.println(result);//输出:aaaa 50 51 } 52 }
首先要明白什么是线程?
明白线程之前要明白什么是进程?
进程是什么呢? 进程是计算机中运行的一个应用程序.
线程:执行该进程的逻辑单元. 线程是用来执行进程的.
Java中万物皆对象,线程也被描述成了一个对象就是Thread对象.
Java对多线程的支持也是特别完善的,特别是JDK1.5之后.
首先明白什么是线程? 什么是进程?
进程就是计算机中运行的一个应用程序. 线程就是执行该进程的逻辑单元.
线程管理:
创建线程的方式:
1.继承Thread类,并复写run方法,创建该类对象,调用start方法开启线程。
2.实现Runnable接口,复写run方法,创建Thread类对象,将Runnable子类对象传递给Thread类对象。调用start方法开启线程。
第二种方式好,将线程对象和线程任务对象分离开。降低了耦合性,利于维护
3.创建FutureTask对象,创建Callable子类对象,复写call(相当于run)方法,将其传递给FutureTask对象(相当于一个Runnable)。
创建Thread类对象,将FutureTask对象传递给Thread对象。调用start方法开启线程。这种方式可以获得线程执行完之后的返回值。
第三种使用Runnable功能更加强大的一个子类.这个子类是具有返回值类型的任务方法.
第一种和第二种两种方式是run()方法运行完是没有返回值的.
线程的信息:
1 public class ThreadInfo { 2 3 public static void main(String[] args) { 4 5 Thread t1 = new Thread(new Runnable() { 6 7 @Override 8 public void run() { 9 synchronized (ThreadInfo.class) { 10 System.out.println("Thread"); 11 } 12 } 13 }); 14 15 t1.start(); 16 17 18 System.out.println(t1.getId()); 19 System.out.println(t1.getName()); 20 System.out.println(t1.getPriority());//优先级 1-10 21 System.out.println(t1.getState());//线程状态: NEW TERMINATED RUNNABLE TIMED_WAITING WAITING BLOCKED 22 } 23 }