java 多线程 1 : 基础

Posted new_boys

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 多线程 1 : 基础相关的知识,希望对你有一定的参考价值。

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

线程的创建和启动:

方式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 : 基础的主要内容,如果未能解决你的问题,请参考以下文章

java基础入门-多线程同步浅析-以银行转账为样例

java多线程基础

Java程序设计多线程基础

Java程序设计多线程基础

Java基础之多线程

java基础知识总结--多线程