java多线程学习笔记(一)!更好的理解多线程
2016-11-15 09:56
295 查看
1.线程的创建
之前知道java中一个多线程的创建方法是继承Thread类或者实现Runable接口,但是看不懂下面这种创建线程的方法
第一种
new Thread(new Runnable() {
@Override
public void run() {
}
}
}).start();//这种方式中new Thread()是创建了一个线程,而new Runable()对象中是线程想要执行的代码,这样把想要执行的代码放到一个创建的对象中,所
或者下面这种创建格式
第二种
new Thread(){
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
}
}.start();
其实两种方法昨天看了一段是视频现在理解了,其实第一种方法就是面向对象的思维模式去创建一个线程,在Thread的源码中,一种是通过构造方法传递一个Runable对象然后为target赋值,然后去实现一个线程的创建,也就是上面的第一种创建方法,一种是直接重写run方法,也就是上面的第二种方法创建线程,但是网上通常是使用第一种方法的比较多?那是为什么呢?是因为第一种通过构造方法的方式创建线程更能体现面向的规则,new Thread()是创建了一个对象,这个对象想要执行的代码就写在了括号里面,这样就很好的体现了面向对象的编程方式。
那我们想一下,下面这种创建对象的方式是会执行Runable中的run方法还是执行thread的run方法呢?
new Thread(
new Runnable() {
public void run() {
while (true) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("runable" + Thread.currentThread().getName());
}
}
}
) {
@Override
public void run() {
while (true) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("thread" + Thread.currentThread().getName());
}
}
}.start();
new Thread(new Runable(){}){}.start();答案是执行thread中的run方法(即是子类中的run方法),为什么呢?因为创建一个new thread的时候重写了父类中的run()方法,那么就会直接执行thread中的run方法了,如果这个子类中的run方法不存在的情况下才会去执行父类中的run方法。
之前知道java中一个多线程的创建方法是继承Thread类或者实现Runable接口,但是看不懂下面这种创建线程的方法
第一种
new Thread(new Runnable() {
@Override
public void run() {
}
}
}).start();//这种方式中new Thread()是创建了一个线程,而new Runable()对象中是线程想要执行的代码,这样把想要执行的代码放到一个创建的对象中,所
//以很好的体现了面向对象的编程规则。
或者下面这种创建格式
第二种
new Thread(){
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
}
}.start();
其实两种方法昨天看了一段是视频现在理解了,其实第一种方法就是面向对象的思维模式去创建一个线程,在Thread的源码中,一种是通过构造方法传递一个Runable对象然后为target赋值,然后去实现一个线程的创建,也就是上面的第一种创建方法,一种是直接重写run方法,也就是上面的第二种方法创建线程,但是网上通常是使用第一种方法的比较多?那是为什么呢?是因为第一种通过构造方法的方式创建线程更能体现面向的规则,new Thread()是创建了一个对象,这个对象想要执行的代码就写在了括号里面,这样就很好的体现了面向对象的编程方式。
那我们想一下,下面这种创建对象的方式是会执行Runable中的run方法还是执行thread的run方法呢?
new Thread(
new Runnable() {
public void run() {
while (true) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("runable" + Thread.currentThread().getName());
}
}
}
) {
@Override
public void run() {
while (true) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("thread" + Thread.currentThread().getName());
}
}
}.start();
new Thread(new Runable(){}){}.start();答案是执行thread中的run方法(即是子类中的run方法),为什么呢?因为创建一个new thread的时候重写了父类中的run()方法,那么就会直接执行thread中的run方法了,如果这个子类中的run方法不存在的情况下才会去执行父类中的run方法。
相关文章推荐
- 关于java方法多线程访问自己的理解
- java 多线程 Synchronized方法和方法块 synchronized(this)和synchronized(object)的理解
- 关于Java中多线程的原理与本人的理解
- Java多线程(一)、理解进程与多线程的概念及关系
- java 中多线程的理解
- [学习笔记]Java代码构建一个线程池的自己学习写的实例,用这个你会更好的理解文章内容
- 深入理解Java中的多线程
- 从JAVA多线程理解到集群分布式和网络设计的浅析
- Java多线程编程--(3)线程互斥、同步的理解
- 线程进程Java多线程(一)、理解进程与多线程的概念及关系
- java多线程编程理解
- Java多线程 -- 深入理解JMM(Java内存模型) --(四)volatile
- Java多线程 -- 深入理解JMM(Java内存模型) --(三)顺序一致性
- 从JAVA多线程理解到集群分布式和网络设计的浅析
- Java多线程 -- 深入理解JMM(Java内存模型) --(七)总结
- Java 多线程编程之五:一个理解 wait() 与 notify() 的例子
- Java多线程 -- 深入理解JMM(Java内存模型) --(二)重排序
- JAVA 多线程 及线程的 一些理解
- 从JAVA多线程理解到集群分布式和网络设计的浅析
- 对java多线程的理解