对线程的理解总结

说到线程,我们一定首先想到的是线程的创建,线程的创建一般有两种方式 一种是实现 Runnable 接口,另一种就是 继承 Thread 类 ,因为Java的单继承多实现机制,所以,优先选择 实现 Runnable 接口。

 1 package test;
 2 
 3 class ThreadTest extends Thread{
 4 
 5 public void run(){
 6 
 7 System.out.println("实现了Thread类");
 8 
 9 }
10 
11 }
12 
13 class RunnableTest implements Runnable{
14 
15 public void run(){
16 
17 System.out.println("实现了runnable接口");
18 
19 }
20 
21 }
22 
23  
24 
25 public class ThreadStartTest {
26 
27 public static void main(String[] args) {
28 
29 //直接继承了Thread ,创建一个Thread的实例
30 
31 ThreadTest t1 = new ThreadTest();
32 
33 //t1启动
34 
35 t1.start();
36 
37 //如果是实现了接口的线程类,需要用对象的实例作为Thread类构造方法的参数
38 
39 Thread t2 = new Thread(new RunnableTest());
40 
41 t2.start();
42 
43 }
44 
45 }

这儿就有一个我很久之前一直不了解的坑。那时因为不经常使用线程类,所以,对线程的开启仅停留在有两种方式上面。在使用继承的方式时,通过new xxxThread()的方式调用Start()方法,但使用接口的方式时 一直也是new xxxThread()d的方式,发现调不了start()方法,就调用了run()方法。.....其实这样是不对的,对于Java来说,通过new的方式调用内部run()方法一点问题都没有,但并不会开启新线程,那样做只会使用main线程。。正确的方式为Thread t2 = new Thread(new RunnableTest()); 然后调用start()方法。

总之一定要调用start()方法的。

1、那线程开启了就要考虑线程安全了

线程安全,说到底是数据的安全,我可不认识线程是谁,它安不安全,跟我没有半毛钱的关系。但数据不能不安全。这里就要提到内存了,因为,造成数据不安全的就是内存。

对于一个程序来说,就是一个进程,一个线程是其中的一部分。当系统为进程分配空间的时候,就会有公共空间(堆,公共方法区),和栈等。而造成不安全的就是这块公共的内存空间。

猜你喜欢

转载自www.cnblogs.com/hxz-nl/p/11099040.html