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项目控制台中文乱码
