线程:是程序执行流的最小单元,包括就绪、阻塞和运行三种基本状态。
1. 继承 Thread 类,然后调用 start 方法。
package com.oracle.demo01; public class MyThread extends Thread{ public void run(){ // 线程 System.out.println("线程名"+getName()); for(int i=0;i<20;i++){ System.out.println("MyThread-"+i); } } }
package com.oracle.demo01; import java.util.concurrent.ThreadPoolExecutor; public class demo01 { public static void main(String[] args) { Thread th=Thread.currentThread(); System.out.println(th.getName()); //// 获取当前线程对象的名称 // Thread.currentThread().getName(); // 创建新线程*(放在上面) MyThread mythread=new MyThread(); // 开启线程、 mythread.start(); for(int i=0;i<20;i++){ System.out.println("main-"+i); } } }
2.实现 Runnable 接口的 run 方法, 然后再用 Thread 类包裹后,调用 start 方法。
package com.oracle.demo02; public class MyRunnable implements Runnable { @Override public void run() { for(int i=0;i<20;i++){ System.out.println("thread-0"+i); } } }
package com.oracle.demo02;
public class demo01 {
public static void main(String[] args) {
// 创建线程任务对象
MyRunnable mr=new MyRunnable();
// 创建thread对象
Thread th=new Thread(mr);
th.start();
for(int i=0;i<20;i++){
System.out.println("main-"+i);
}
}
3.线程池
package com.oracle.demo03; public class MyRun implements Runnable{ public void run(){ String name=Thread.currentThread().getName(); for(int i=0;i<20;i++){ System.out.println(name+i); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
package com.oracle.demo01; public class MyThread extends Thread{ public void run(){ // 线程 System.out.println("线程名"+getName()); for(int i=0;i<20;i++){ System.out.println("MyThread-"+i); } } }
public class demo02 { public static void main(String[] args) { // 用线程池的方法完成线程任务 // 从线程池工厂中获取线程池对象 ExecutorService es=Executors.newFixedThreadPool(2); // 创建线程任务对象 MyRun mr=new MyRun(); // 让线程池自主选择一条线程执行线程任务 es.submit(mr); es.submit(mr); es.submit(mr); // 关闭线程池 es.shutdown(); } }