关于Java的多线程Runnable的个人理解(基础,不讲概念)
背景说明:
所遇到的问题1:问题描述:
解决步骤1:
解决步骤2:
最后:
代码:主程序java代码:javaThreadTestpackage org.axc.com.javathread; import java.util.Scanner; /** * * @ClassName: javaThreadTest * @Description: 测试java线程的运行 * @author Anxc * @date 2019年8月8日 * */ public class JavaThreadTest { public static void main(String[] args) { // 线程的创建 MyThread mythread; System.out.println("---------继承Thread方式来实现创建线程-----------------"); Scanner in = new Scanner(System.in); String menu="线程测试开始"; int chioce=1; while(chioce!=0) { mythread = new MyThread(); System.out.println("请输入非0来开始调试继承的Thread"); System.out.print(">>"); chioce = in.nextInt(); if(chioce==0) { System.out.println("ByeBye"); break; } // 输出菜单 System.out.println(menu); // 线程运行 mythread.start(); } System.out.println("------------利用Runnable接口实现创建线程-------------"); // 测试Runnable的多线程所用时间 chioce = 1; // 利用Runnable接口,初始化线程 Runnable runnable = new MyRunnable(); long startTime; long endTime; while(chioce!=0) { System.out.println("请输入非0来开始调试"); System.out.print(">>"); chioce = in.nextInt(); if(chioce == 0) { System.out.println("Runnable ByeBye!"); break; } startTime = System.currentTimeMillis(); System.out.println(startTime); // 创建10个线程来观察是否是真的多线程运行 new Thread(runnable).start(); new Thread(runnable).start(); new Thread(runnable).start(); new Thread(runnable).start(); new Thread(runnable).start(); new Thread(runnable).start(); new Thread(runnable).start(); new Thread(runnable).start(); new Thread(runnable).start(); new Thread(runnable).start(); Thread t=new Thread(runnable); //t.isAlive();//判断线程是否存活 try { Thread.sleep(8000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 输出最后所用时间 System.out.println("最终所用时间为:"+(((MyRunnable) runnable).getEndTime()-startTime)); } } } 实现接口Runnable的java程序代码:MyRunnablepackage org.axc.com.javathread; /** * * @ClassName: MyRunnable * @Description: 测试Runnable的真正多线程 * @author Anxc * @date 2019年8月8日 * */ public class MyRunnable implements Runnable { private static int count=100; //加互斥锁,当一个线程去修改值时,其它线程不能读取 public static long endTime; private static boolean flag=true; public MyRunnable() { } @Override public void run() { int num=10; // 加锁,使修改变量时只有一个线程在操作 while(num>0) { if(flag) { flag=false;//加锁 count--; // TODO Auto-generated method stub System.out.println("当前剩余"+count); flag=true;//关锁 } else { try { Thread.sleep(10); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } continue; } try { Thread.sleep(500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } num--; } // 获取线程运行终止时间 endTime = System.currentTimeMillis(); // System.out.println(endTime); } public long getEndTime() { return endTime; } } 继承Thread的方法的java程序:MyThreadpackage org.axc.com.javathread; /** * * @ClassName: MyThread * @Description: java线程的实现方式之一继承Thread * @author Anxc * @date 2019年8月8日 * */ public class MyThread extends Thread { private static int count = 0; public void run() { int num=0; count++; while(num<5) { System.out.println("再等等!"+count+num); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } num++; } System.out.println("当前已经累计运行该线程:"+count+"次"); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |