Java三种实现多线程的方式
2020-07-12 17:16
274 查看
一、继承Thread类
- 继承Thread类并重写run方法
- 调用start方法来执行多线程
public class ThreadTest extends Thread{ //多线程 @Override public void run() { for (int i = 0; i < 200; i++) { System.out.println("多线程正在运行 "+i); } } public static void main(String[] args) { //主线程 ThreadTest threadTest = new ThreadTest(); threadTest.start();//开起多线程 for (int i = 0; i < 200; i++) { System.out.println("主线程正在运行"+i); } } }
结果可以显示,两条线程是同步进行的
。。。 主线程正在运行5 主线程正在运行6 主线程正在运行7 多线程正在运行 0 多线程正在运行 1 多线程正在运行 2 多线程正在运行 3 多线程正在运行 4 主线程正在运行8 主线程正在运行9 主线程正在运行10 。。。
二、实现Runnable接口
- 实现Runnable接口并重写run方法
- 创建Runnable接口的实现类对象
- 创建线程对象,传入Runnable接口的实现类对象,调用start方法开起线程
public class RunnableTest implements Runnable{ //多线程 @Override public void run() { for (int i = 0; i < 200; i++) { System.out.println("多线程正在运行 "+i); } } public static void main(String[] args) { //主线程 //创建Runnable接口的实现类对象 RunnableTest runnableTest = new RunnableTest(); //创建线程对象,通过线程对象来开启线程 // Thread thread = new Thread(runnableTest); // thread.start(); //上面两行代码等效于 new Thread(runnableTest).start(); for (int i = 0; i < 200; i++) { System.out.println("主程序正在运行"+i); } } }
结果可以显示,两条线程是同步进行的
主程序正在运行0 多线程正在运行 0 主程序正在运行1 主程序正在运行2 主程序正在运行3 主程序正在运行4 多线程正在运行 1 主程序正在运行5 主程序正在运行6 。。。
三、实现Callable接口
public class CallableTest implements Callable<Void> { //多线程实现类 @Override public Void call(){ for (int i = 0; i < 20; i++) { System.out.println(Thread.currentThread().getName()+"-->正在运行 "+i); } return null; } public static void main(String[] args) { //创建三个线程 CallableTest t1 = new CallableTest(); CallableTest t2 = new CallableTest(); CallableTest t3 = new CallableTest(); //创建执行服务,线程池 ExecutorService ser = Executors.newFixedThreadPool(3); //提交执行 ser.submit(t1); ser.submit(t2); ser.submit(t3); //关闭服务 ser.shutdownNow(); } }
结果可以显示,三条线程是同步进行的
pool-1-thread-1-->正在运行 0 pool-1-thread-2-->正在运行 0 pool-1-thread-2-->正在运行 1 pool-1-thread-2-->正在运行 2 pool-1-thread-2-->正在运行 3 pool-1-thread-2-->正在运行 4 pool-1-thread-2-->正在运行 5 pool-1-thread-2-->正在运行 6 pool-1-thread-3-->正在运行 0 pool-1-thread-2-->正在运行 7 pool-1-thread-2-->正在运行 8 pool-1-thread-2-->正在运行 9 pool-1-thread-1-->正在运行 1 。。。
四、多线程之一个龟兔赛跑示例
public class EgRun implements Runnable{ @Override public void run() { for (int i = 0; i <=100; i++) { if (Thread.currentThread().getName().equals("兔子")&&(i>0&&i%40==0)){ //如果是兔子每跑40步 try { Thread.sleep(5);//兔子休息5毫秒 } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(Thread.currentThread().getName()+"-->跑了"+i+"步"); if (i==100){ System.out.println(Thread.currentThread().getName()+"到大终点!"); } } } public static void main(String[] args) { EgRun egRun = new EgRun(); new Thread(egRun,"兔子").start(); new Thread(egRun,"乌龟").start(); } }
结果
兔子-->跑了0步 乌龟-->跑了0步 兔子-->跑了1步 乌龟-->跑了1步 兔子-->跑了2步 乌龟-->跑了2步 乌龟-->跑了3步 兔子-->跑了3步 兔子-->跑了4步 兔子-->跑了5步 兔子-->跑了6步 。。。。。。。 。。。。。。。 乌龟-->跑了99步 乌龟-->跑了100步 乌龟到大终点! 兔子-->跑了40步 兔子-->跑了41步 兔子-->跑了42步 兔子-->跑了43步 兔子-->跑了44步 。。。。。。。 。。。。。。。
相关文章推荐
- JAVA多线程实现的三种方式
- 详解三种java实现多线程的方式
- Java实现多线程的三种方式
- JAVA多线程实现的三种方式
- JAVA多线程实现的三种方式
- JAVA多线程实现的三种方式
- Java实现多线程的三种方式
- JAVA多线程实现的三种方式
- JAVA多线程实现的三种方式
- JAVA多线程实现的三种方式
- JAVA多线程实现的三种方式
- JAVA多线程实现的三种方式
- JAVA多线程实现的三种方式
- Java常见面试题—实现多线程的三种方式
- JAVA多线程实现的三种方式
- JAVA多线程实现的三种方式
- JAVA基础(19) java多线程实现的三种方式
- Java多线程实现的三种方式
- JAVA多线程实现的三种方式
- JAVA多线程实现的三种方式