Java -- Thread -- Collection -- 1传统线程技术回顾
线程就是程序的一条执行线索/线路。
创建线程的两种传统方式
1.创建Thread的子类,覆盖其中的run方法,运行这个子类的start方法即可开启线程
Thread thread = new Thread() { @Override public void run() { while (true) { //获取当前线程对象 获取线程名字 Thread.currentThread() threadObj.getName() //让线程暂停,休眠,此方法会抛出中断异常InterruptedException Thread.sleep(毫秒值); } } }; thread.start();
2.创建Thread时传递一个实现Runnable接口的对象实例
Thread thread = new Thread(new Runnable() { public void run() {} }
); thread.start();
问题:下边的线程运行的是Thread子类中的方法还是实现Runnable接口类的方法
new Thread( // b、传递实现Runnable接口的对象 new Runnable() { public void run() {} } ){ // a、覆盖Thread子类run方法 public void run(){} }.start();
分析:new Thread(Runnable.run()){run()}.start();
子类run方法实际就是覆盖父类中的run方法,如果覆盖了就用子类的run方法,不会再找Runnable中的run方法了,所以运行的是子类中的run方法
总结:
由Thread类中的run方法源代码中看出,两种传统创建线程的方式都是在调用Thread对象的run方法,如果Thread对象的run方法没有被覆盖,并且像上边的问题那样为Thread对象传递了一个Runnable对象,就会调用Runnable对象的run方法。
多线程并不一定会提高程序的运行效率。举例:一个人同时在三张桌子做馒头。
多线程下载:并不是自己电脑快了,而是抢到更多服务器资源。例:服务器为一个客户分配一个20K的线程下载,你用多个线程,服务器以为是多个用户就分配了多个20K的资源给你。
浙公网安备 33010602011771号