疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

java培训:多线程学习总结


 

  学过编程的人都知道,java至少有一个线程,我们称为主线程,当java程序被启动的时候就会创建这个主线程,调用main()方法。那么我们在开发过程中该如何实现多线程呢?java软件培训将为你介绍一下!

  线程是指正在执行的一个指令序列。在Java语言中是指从一个线程对象的start()方法执行开始,运行run()方法体中的那一段相对独立的过程。主要有两种实现的方式:

  1.继承Thread类

  Java代码 1. public class ThreadTest extends Thread {

  2. /**

  3. * 覆盖Thread类的run方法

  4. */

  5. public void run() {

  6. System.out.println("测试线程启动");

  7. }

  8. public static void main(String a[]) {

  9. for (int i = 1; i < 4; i++) {

  10. ThreadTest test = new ThreadTest();//创建线程类ThreadTest对象

  11. test.start();//启动线程

  12. System.out.println("启动线程"+i);

  13. }

  14. }

  15. }

  执行结果是:

  测试线程启动

  启动线程1

  启动线程2

  测试线程启动

  启动线程3

  测试线程启动

  实现Runnable接口

  Java代码 1. public class RunnableTest implements Runnable {

  2. /**

  3. * 实现Runnable接口中的run方法

  4. */

  5. public void run() {

  6. System.out.println("测试线程启动");

  7. }

  8. public static void main(String a[]) {

  9. for (int i = 1; i < 4; i++) {

  10. RunnableTest test = new RunnableTest();//创建线程类RunnableTest的对象

  11. Thread thread = new Thread(test);//创建线程类Thread对象

  12. thread.start();//启动线程

  13. System.out.println("启动线程"+i);

  14. }

  15. }

  16. }

  测试结果如下:

  测试线程启动

  启动线程1

  启动线程2

  测试线程启动

  启动线程3

  测试线程启动

  三、请用代码说明匿名内部类和TimerTask实现线程的过程

  1.匿名内部类实现多线程的demo

  Java代码 1. public class ThreadTest {

  2. //主函数入口

  3. public static void main(String[] args) {

  4. ThreadTest tt =new ThreadTest();

  5. for(int i=0;i<10;i++){

  6. tt.StartMyThread(i);

  7. }

  8. }

  9. /**

  10. * 这个方法会启动一个匿名线程

  11. * @param threadID

  12. */

  13. public void StartMyThread(int threadID){

  14. //要传入匿名线程内使用的参数必须定义为final型

  15. final int id = threadID;

  16. //下边是匿名内部类实现多线程的过程

  17. java.lang.Runnable runner = new Runnable(){

  18. public void run(){

  19. int i =10;

  20. boolean flag = true;

  21. while(flag){

  22. try{

  23. Thread.sleep(1000);

  24. //在匿名线程中调用类中的其他方法

  25. otherMethod(id);

  26. if(i>13){

  27. flag = false;

  28. }

  29. }catch(Exception ef){

  30. ef.printStackTrace();

  31. }

  32. }

  33. }

  34. };

  35. //最后,启动这个内部线程

  36. Thread t = new Thread(runner);

  37. t.start();

  38. }

  39. //测试方法

  40. private void otherMethod(int i){

  41. System.out.println("可以直接调用类中的其他方法:"+i);

  42. }

  43. }

  测试结果如下://控制台每隔一秒钟输出下边的文字

  可以直接调用类中的其他方法:4

  可以直接调用类中的其他方法:0

  可以直接调用类中的其他方法:9

  可以直接调用类中的其他方法:5

  可以直接调用类中的其他方法:1

  可以直接调用类中的其他方法:6

  可以直接调用类中的其他方法:2

  可以直接调用类中的其他方法:8

  可以直接调用类中的其他方法:7

  可以直接调用类中的其他方法:3

  2.TimerTask实现线程的demo

  使用多线程的还有可能是因为程序中要定时执行某些任务而又不能暂停当前的工作,JDK为这样的功能实现提供了两个类,一个是可作为一个独立线程对象运行的实现了Runnable接口的java.util.TimerTask类;另一个是调度TimerTask对象定时运行的java.util.Timer类。Timer类最常用的一个方法是:

  Public void schedule(TimerTask task,long delay,long period)

  这个方法会调度task对象在程序启动delay毫秒后,每隔period毫秒执行一次。

  Java代码 1. import java.util.Timer;

  2. import java.util.TimerTask;

  3. /**

  4. * 使用定时器执行线程

  5. * @author 赵广超

  6. */

  7. public class TimerPrint extends TimerTask{

  8. private int runCount =0;//运行次数计数器

  9. /**

  10. * @param args

  11. */

  12. public static void main(String[] args) {

  13. Timer timer = new Timer();//创建一个定时器对象

  14. TimerPrint dw = new TimerPrint();//创建一个定时任务对象

  15. //调度这个定时任务在程序启动五秒后,每隔3秒运行一次

  16. timer.schedule(dw, 5000,3000);//这个方法是Timer中最常用的一个

  17. }

  18. /**

  19. * 重写继承自TimerTask中的run方法,作为线程运行时被调用

  20. */

  21. public void run(){

  22. runCount++;

  23. System.out.println(runCount +"次定时运行"+System.currentTimeMillis()/1000);

  24. }

  25. }

  测试结果如下://控制台每隔三秒输出一行字符串

  1次定时运行1353589280

  2次定时运行1353589281

  3次定时运行1353589282

  4次定时运行1353589283

  5次定时运行1353589284

  6次定时运行1353589285

  线程的学习是java学习中很重要的一部分,学习java最重要的就是能找到合适的java培训机构,广州疯狂java成立以来一直以学生就业为己任。疯狂java一直致力于毕业生再就业,如果你想进入java行业,那么可以到我们官网下载java视频教程