java:对于多线程的理解以及注意事项

Java多线程

一、线程简介

对于线程的简单描述:方法按照执行顺序入栈,执行完以后出栈,全部执行完毕(栈空)的过程就是一个线程。

二、Java多线程的实现

java实现多线程有两种方式:一种是继承Thread类,另一种便是实现Runnable接口。

1、以继承Thread类为例,实现多线程

(1)、继承Thread类实现多继承,必须重写run()方法,然后调用start()方法启动线程。 代码验证:

public class ThreadTest extends Thread {
          
   

    private String name;

    public ThreadTest(String name) {
          
   
        this.name = name;
    }

    @Override
    public void run() {
          
   
        System.out.println(name + "come on!");
    }
}
public class ThreadDemo {
          
   

    public static void main(String[] args) {
          
   

        ThreadTest t1 = new ThreadTest("one");

        ThreadTest t2 = new ThreadTest("two");

        t1.start();
        t2.start();
	}
}

运行结果: 以上便实现了多线程的执行。 有结果可知,每个线程的执行顺序并不是按照代码的顺序执行的。但是我们可以通过具体的方法去控制。 (2)、sleep()方法,使线程休眠,时间为ms。 (3)、join()方法使其他线程等待当前线程终止,等待时间为ms。 代码验证:

public class ThreadDemo {
          
   

    public static void main(String[] args) {
          
   

        ThreadTest t1 = new ThreadTest("one");

        ThreadTest t2 = new ThreadTest("two");

        t1.start();
        try {
          
   
            Thread.sleep(1000);
            System.out.println("沉睡1s");
        } catch (InterruptedException e) {
          
   
            e.printStackTrace();
        }
        t2.start();
    }
}

运行结果:

public class ThreadDemo {
          
   

    public static void main(String[] args) {
          
   

        ThreadTest t1 = new ThreadTest("one");

        ThreadTest t2 = new ThreadTest("two");

        t1.start();
        try {
          
   
            t1.join();
            System.out.println("等待上一线程的终止!");
        } catch (InterruptedException e) {
          
   
            e.printStackTrace();
        }
        t2.start();
    }
}

运行结果: 以上便是一个多线程的简单实现。

三、Java多线程需要注意的地方

(1)、线程的执行是通过栈来实现的(线程栈)。线程栈中的每一个执行的方法都是拷贝过来的(线程栈中每一个方法称为栈帧)。 (2)、两个线程执行run方法以及内部声明的变量的时候是互不干扰的(拷贝的run方法) (3)、多个线程对共同变量的地址单元进行操作的时候,各自拷贝一份,进行各自的操作,容易产生线程不安全的现象。(用锁解决) (4)、在CPU产生明显浪费的时候使用多线程最合适。

经验分享 程序员 微信小程序 职场和发展