1.通过继承Thread类
public class t1 extends Thread{ @Override public void run(){ for (int i=0;i<10 ;i++) { if(i%2==0){ System.out.println(i + "是偶数"); }else { System.out.println(i + "是奇数"); } } } public static void main(String[] args) { t1 t=new t1(); t.start(); for (int i = 11; i < 20; i++) { System.out.println(i + "比10大"); } } }
2.通过实现Runnable接口
public class Race implements Runnable{ static String winner; @Override public void run() { for (int i = 1; i <=100 ; i++) { if(Thread.currentThread().getName().equals("兔子")&&i%50==0){ try { Thread.sleep(5); } catch (InterruptedException e) { throw new RuntimeException(e); } } if(flag(i)){ break; } System.out.println(Thread.currentThread().getName() + "跑了" + i); } } boolean flag(Integer i){ if(winner!=null){ return true; } if(i>=100){ winner=Thread.currentThread().getName(); System.out.println( winner+ "是胜利者"); return true; } else return false; } public static void main(String[] args) { Race race=new Race(); new Thread(race,"兔子").start(); new Thread(race,"乌龟").start(); } }
3.通过实现Callable接口
public class Caller implements Callable { @Override public Object call() throws Exception { for (int i = 1; i < 10; i++) { System.out.println("我现在是" + i); } return true; } public static void main(String[] args) { Caller caller=new Caller(); FutureTask futureTask=new FutureTask(caller); new Thread(futureTask).start(); for (int i = 11; i <20 ; i++) { System.out.println("我终于长大了,会不会返老还童呢" + i); } try { System.out.println(futureTask.get()); } catch (InterruptedException e) { throw new RuntimeException(e); } catch (ExecutionException e) { throw new RuntimeException(e); } } }
4.线程池实现
public class pool implements Runnable{ @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println("我是" + Thread.currentThread().getName() + "产生的" + i); } } public static void main(String[] args) { int corePoolSize=5; int maxPoolSize=10; long keepAliveTime=5000; ThreadPoolExecutor executor=new ThreadPoolExecutor( corePoolSize,//核心线程数 maxPoolSize,//最大线程数 keepAliveTime,//空闲存活时间 TimeUnit.SECONDS,//时间单位 new LinkedBlockingDeque<Runnable>(),//阻塞队列 Executors.defaultThreadFactory(),//线程工厂 new ThreadPoolExecutor.CallerRunsPolicy()//拒绝策略 ); executor.execute(new pool()); executor.execute(new pool()); executor.execute(new pool()); executor.execute(new pool()); executor.shutdown(); } }