A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Super_Nos 于 2015-5-11 21:52 编辑

JAVA多线程----创建与启动

以前写的帖子都是题解,第一次写这种技术贴(算不上技术贴,顶天是个随笔!),这篇帖子主要讲解多线程,主要还是写一些例子,写的不好请见谅,希望能和大家多多交流!

java中实现多线程有三种方法,继承Thread类,实现Runnable接口,这两种都是线程执行完后无返回值的,使用ExecutorService、Callable、Future实现多线程,这样的线程结束后有返回值。

1.继承Thread类实现多继承

继承Thread类的方法比较简单,直接自己的类extends Thread就可以,个人感觉这个方法还是基于实现Runnable接口。

  1. class 类名 extends Thread {}
复制代码
复写run()方法,在run()方法里面写上多线程要执行的代码。

  1. class Mythread extends Thread{
  2.       public void run(){
  3.       for(int i = 0; i < 5; i ++)
  4.             System.out.println(i);
  5.       }
  6. }
复制代码
启动线程的唯一方式就是调用start()方法。

为什么不直接调用run()方法呢?

Java来说,run()方法没有任何特别之处。像main()方法一样,它只是新线程知道调用的方法名称

而start()却不同,在调用start()方法之前:线程处于新状态中,新状态指有一个Thread对象,但还没有一个真正的线程。

在调用start()方法之后会启动新的执行线程(具有新的调用栈),该线程从新状态转移到可运行状态,当该线程获得机会执行时,其目标run()方法将运行。

  1. class Mythread extends Thread{
  2.       private String name;
  3.       public Mythread(String name){
  4.              this.name = name;
  5.       }
  6.       public void run(){
  7.              for(int i = 0; i < 1000; i ++)
  8.              System.out.println(name + "线程: " + i);
  9.        }
  10. }
  11. public class Test {
  12.       public static void main(String[] args) {
  13.             Mythread mt1 = new Mythread("A");
  14.             Mythread mt2 = new Mythread("B");
  15.             mt1.start();
  16.             mt2.start();
  17.       }
  18. }
复制代码
每次的执行结果都不一样。根据CPU的执行速率不同,可以对 i 值的范围进行改变。

今天到这,明天继续~~







9 个回复

倒序浏览
挺好的,坚持每天总结
回复 使用道具 举报
xiaowen_wu 发表于 2015-5-7 20:37
挺好的,坚持每天总结

加油
回复 使用道具 举报
特意来看了你的帖子,谢谢分享,很有用,学习了。
回复 使用道具 举报
KK要有光 发表于 2015-5-11 18:43
特意来看了你的帖子,谢谢分享,很有用,学习了。

大家多交流~加油~~
回复 使用道具 举报
Super_Nos 发表于 2015-5-11 19:11
大家多交流~加油~~

okok,有了问题多交流。
回复 使用道具 举报
不错。。。。。。挺好的,加油
回复 使用道具 举报
bboyXiaoNuo 发表于 2015-5-11 21:03
不错。。。。。。挺好的,加油

以后多交流~
回复 使用道具 举报
Cat 中级黑马 2015-5-11 21:18:54
9#
学习一下
回复 使用道具 举报

以后多交流~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马