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产生明显浪费的时候使用多线程最合适。
上一篇:
IDEA上Java项目控制台中文乱码