本帖最后由 Super_Nos 于 2015-5-11 21:52 编辑
JAVA多线程----创建与启动
以前写的帖子都是题解,第一次写这种技术贴(算不上技术贴,顶天是个随笔!),这篇帖子主要讲解多线程,主要还是写一些例子,写的不好请见谅,希望能和大家多多交流!
java中实现多线程有三种方法,继承Thread类,实现Runnable接口,这两种都是线程执行完后无返回值的,使用ExecutorService、Callable、Future实现多线程,这样的线程结束后有返回值。
1.继承Thread类实现多继承
继承Thread类的方法比较简单,直接自己的类extends Thread就可以,个人感觉这个方法还是基于实现Runnable接口。
- class 类名 extends Thread {}
复制代码 复写run()方法,在run()方法里面写上多线程要执行的代码。
- class Mythread extends Thread{
- public void run(){
- for(int i = 0; i < 5; i ++)
- System.out.println(i);
- }
- }
复制代码 启动线程的唯一方式就是调用start()方法。
为什么不直接调用run()方法呢?
对Java来说,run()方法没有任何特别之处。像main()方法一样,它只是新线程知道调用的方法名称。
而start()却不同,在调用start()方法之前:线程处于新状态中,新状态指有一个Thread对象,但还没有一个真正的线程。
在调用start()方法之后会启动新的执行线程(具有新的调用栈),该线程从新状态转移到可运行状态,当该线程获得机会执行时,其目标run()方法将运行。 - class Mythread extends Thread{
- private String name;
- public Mythread(String name){
- this.name = name;
- }
- public void run(){
- for(int i = 0; i < 1000; i ++)
- System.out.println(name + "线程: " + i);
- }
- }
- public class Test {
- public static void main(String[] args) {
- Mythread mt1 = new Mythread("A");
- Mythread mt2 = new Mythread("B");
- mt1.start();
- mt2.start();
- }
- }
复制代码 每次的执行结果都不一样。根据CPU的执行速率不同,可以对 i 值的范围进行改变。
今天到这,明天继续~~
|