大脑看起来是很多个任务都在做,但是本质上就是我们的大脑在同一时间依旧只做了一件事情
很有趣的就是高中时期我一直在听课做作业,因为人脑是单线程的,所以可能在这一瞬你是在学习写作业,但是下一个瞬间你就是在听歌,两者这么循环切换。之所以觉得有趣是我在高中时期就想过,边听音乐边写作业会不会有影响,根据我的成绩来看,应该确实是有一定的影响的,但还是因人而异。
线程创建的三种方式:
1.继承Thread类
2.实现runnanble接口(重要)
3.实现Callable接口
public class TestThread01 extends Thread {
@Override
public void run() {
//run()方法线程体
for(int i = 0;i<20;i++){
System.out.println("我在看代码——————"+i);
}
}
public static void main(String[] args) {
//main()方法主线程
//创建一个线程对象
TestThread01 testThread01 = new TestThread01();
//调用start()方法开启线程
testThread01.start();
for (int i = 0;i<2000;i++){
System.out.println("我在学习多线程+++"+i);
}
}
}
总结:线程开启不一定立即执行,由CPU调度执行
---------------------------------------------------------------------
使用runnable接口来实现多线程,由于java单继承,建议使用
//创建线程方式2:实现runnable接口,重写run方法,执行线程需要丢入runnable接口实现类,调用start方法
public class TestThread02 implements Runnable{
String url;
String name;
public TestThread02(String url,String name){
this.url = url;
this.name = name;
}
@Override
public void run() {
WebDownLoad webDownLoad = new WebDownLoad();
webDownLoad.download(url,name);
}
public static void main(String[] args) {
TestThread02 testThread021 = new TestThread02("","");
TestThread02 testThread022 = new TestThread02("","");
TestThread02 testThread023 = new TestThread02("","");
new Thread(testThread021).start();
new Thread(testThread022).start();
new Thread(testThread023).start();
}
}
class WebDownLoad{
public void download(String url, String name){
try {
FileUtils.copyURLToFile(new URL(url),new File(name));
} catch (IOException e) {
e.printStackTrace();
System.out.println("下载出现问题!");
}
}
}
避免单继承局限性,灵活方便,方便一个对象被多个线程使用,一份资源多个代理