码迷,mamicode.com
首页 > 编程语言 > 详细

java 多线程 1 : 基础

时间:2018-09-18 11:19:24      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:调用   创建线程   有一个   .com   连续   情况   xtend   过程   demo   

进程和线程:  一个程序运行后至少有一个进程,一个进程里面可以包含多个线程,但是至少要包含一个线程。

线程的创建和启动:

方式1:继承Thread类创建线程类,步骤
     1.定义Thread类的子类,重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务,因此run()方法也被称为线程执行体
     2.创建Thread子类的实例,即创建了线程对象
     3.调用线程对象的start()方法来启动该线程

public class Thread1 extends Thread{
    private int i;
    @Override
    public void run() {
        for( ; i < 100 ; i++) {
            System.out.println(getName() + "-----" + i);
        }
    }
    
    public static void main(String[] args) {
        for(int i = 0; i<100; i++) {
            System.out.println(Thread.currentThread().getName() + " -- " + i);
            if(i == 20) {
                new Thread1().start();
                new Thread1().start();
            }
        }
    }
}

技术分享图片技术分享图片

注意:main()方法的方法体就是主线程的线程体
   Demo中i为Thread1的实例变量,但因为程序每次创建线程对象都需要创建一个Thread1对象,两个线程是不会共享该实例变量的 , 强调这一点,是想和方式2做比较,加深理解。

 

方式2:实现Runnable接口创建线程类,步骤
     1.定义Runnable接口的实现类,重写该类的run()方法,run()方法为该线程的线程执行体
     2.创建Runnable实现类的实例,并以此实例作为Thread的Target来创建Thread对象,该Thread对象才是真正的线程对象
     3.调用线程对象的start()方法来启动该线程

public class Thread2 implements Runnable{
    private int i;
    @Override
    public void run() {
        for( ; i < 100; i ++) {
            //
            System.out.println(Thread.currentThread().getName() + " -- " + i);
        }
    }
    
    public static void main(String[] args) {
        for(int i = 0 ; i < 100 ; i++) {
            System.out.println(Thread.currentThread().getName() + " -- " + i);
            if(i == 20) {
                Thread2 th = new Thread2();
                new Thread(th , "线程1").start();
                new Thread(th , "线程2").start();
            }
        }
    }
}

技术分享图片

注意:调用getName的方式必须是通过Thread.currentThread.getName(),因为Runnable对象只能作为线程对象的target
   运行demo可以看到,两个子线程的i变量是连续的,也就是采用runnale接口方式创建的多个线程可以共享线程类的实例变量,程序创建的Runnable对象只是线程的target,而多个线程,可以共享一个target,所以,多个线程可以共享一个线程类(实际上应该是线程的target类)的实例变量。

     

方式3:使用Callable 和 Future 创建线程:

 

实际运用过程中使用方式2和方式3比较多 , 1. 单继承,多实现 , 2. 多个线程可以共享一个target对象,所以非常适合多个线程来出来同一份资源得情况   

 

java 多线程 1 : 基础

标签:调用   创建线程   有一个   .com   连续   情况   xtend   过程   demo   

原文地址:https://www.cnblogs.com/Uzai/p/9663359.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!