A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sxwnzbn 中级黑马   /  2015-9-17 10:26  /  228 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

多线程:
创建线程的目的:开启新路径让多部分代码实现同时执行;
创建多线程2中方法之一:继承Thread类:
1,创建一个类继承Thread类,
2,覆写run()
3,创建该类对象并调用start();

多线程调用run()和start()区别:
调用run()不开启线程,仅是对象调用方法;
调用start方法开启线程,并让jvm调用run()在开启的线程中执行;

继承Thread类的原理:
Thread类描述线程事物,具备线程应该有的功能;
那为什么不直接创建Thread类的实例来调用start()开启线程?那是因为Thread类的run()不做任何事情,更是因为run()没有我们定义给线程要执行的代码(线程任务)

之前所说的主线程的任务定义在main(),而我们自定义的线程需要执行的代码(线程任务)放在覆写的run();既然Thread类已经定义了线程任务的位置,那么我们只要在位置中定义任务代码即可;

创建线程2种方法之二:
1,定义一个类实现Runnable接口;
2,覆写run();
3,创建该类的实例对象;例如Demo d=new Demo();//注意线程类只有是Thread类或者他的子类,自己定义的类不是线程类;
4,创建Thread类的实例对象,并将该类作为参数传给Thread类的实例对象:Thread t=new Thread(d);
5,开启线程:利用线程类Thread调用自己的start():t.start();

多线程中的异常:相互之间的线程是独立的,假如有主线程main和自己定义的线程Thread-0;那么main结束了就退出,此时不会影响Thread-01,同理Thread-01也不会影响main线程,即使他俩有一个发生异常;

实现Runnable接口的原理:
既然可以继承Thread类覆写它的run()再new对象调用它的start()来执行run()中的任务代码,那么为何还要使用Runnable接口来是达到多线程并发访问的目的?
这是因为开发中不能保证你定义的类没有父类从而可以去继承父类Thread(java中单继承),故要实现Runnable

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马