
线程多任务多线程普通方法调用和多线程效率区别程序-进程-线程总结线程创建线程创建方式继承Thread类代码packagecom.jiang.lesson1;//创建线程方式一继承Thread类重写run()方法调用start开启线程//总结注意线程开启不一定立即执行由CPU调度执行publicclassTestThreadextendsThread{Overridepublicvoidrun(){//run方法线程体for(inti0;i20;i){System.out.println(爱你第----i);}}publicstaticvoidmain(String[]args){//main线程主线程//创建一个线程对象TestThreadtestThreadnewTestThread();//调用start()方法开启线程testThread.start();for(inti0;i20;i){System.out.println(我在学习多线程-----i);}}}结果下载图片代码packagecom.jiang.lesson1;importorg.apache.commons.io.FileUtils;importjava.io.File;importjava.net.URL;//练习Thread,实现多线程同步下载图片publicclassTestThread01extendsThread{privateStringurl;//网络图片地址privateStringname;//保存的文件名publicTestThread01(Stringurl,Stringname){//构造方法this.urlurl;this.namename;}//下载图片线程的执行体Overridepublicvoidrun(){WebDownloaderwebDownloadernewWebDownloader();webDownloader.downloader(url,name);System.out.println(下载文件名为name);}publicstaticvoidmain(String[]args){TestThread01t1newTestThread01(https://i0.hdslb.com/bfs/archive/b906001449553663f1a39a7d940fa078dc9fc5a7.jpg,1.jpg);TestThread01t2newTestThread01(https://i0.hdslb.com/bfs/archive/bd3b4b731a45f131f4bab6e5bd453bb7cc2efcb7.jpg,2.jpg);t1.start();t2.start();}//下载器classWebDownloader{//下载方法publicvoiddownloader(Stringurl,Stringname){try{FileUtils.copyURLToFile(newURL(TestThread01.this.url),newFile(TestThread01.this.name));}catch(Exceptione){e.printStackTrace();System.out.println(IO异常);}}}}结果创建线程方式2实现Runnable接口代码packagecom.jiang.lesson1;//创建线程方式2实现Runnable接口重写run方法执行线程需要丢入runnnable接口实现类调用start方法publicclassTestThread02implementsRunnable{Overridepublicvoidrun(){//run方法线程体for(inti0;i20;i){System.out.println(爱你第----i);}}publicstaticvoidmain(String[]args){//创建runnable接口的实现类对象TestThreadtestThread2newTestThread();//创建一个线程对象通过线程对象来开启我们的线程代理//TestThread thread new Thread(testThread2);//thread.start();newThread(testThread2).start();for(inti0;i20;i){System.out.println(我在学习多线程-----i);}}}结果小结买火车票代码packagecom.jiang.lesson1;//并发问题此代码缺点为几个人可以抢到同样的票//多个线程同时操作一个对象//买火车票//发现问题多个线程操作同一个资源的情况下线程不安全数据紊乱publicclassTestThread04implementsRunnable{//票数privateintticktNums10;Overridepublicvoidrun(){while(true){if(ticktNums0){break;}//模拟延时try{Thread.sleep(200);//休眠}catch(InterruptedExceptione){e.printStackTrace();}System.out.println(Thread.currentThread().getName()--拿到了第ticktNums--票);}}publicstaticvoidmain(String[]args){TestThread04ticketnewTestThread04();newThread(ticket,明).start();newThread(ticket,老师).start();newThread(ticket,黄牛).start();}}结果龟兔赛跑代码packagecom.jiang.lesson1;//模拟龟兔赛跑publicclassRaceimplementsRunnable{//胜利者privatestaticStringwinnner;Overridepublicvoidrun(){for(inti0;i100;i){//模拟兔子休息if(Thread.currentThread().getName().equals(兔子)i%100){try{Thread.sleep(10);}catch(Exceptione){e.printStackTrace();}}//判断比赛是否结束booleanflaggameOver(i);//如果比赛结束了就停止该程序if(flag){break;}System.out.println(Thread.currentThread().getName()--跑了i步);}}//判断是否完成比赛publicbooleangameOver(intsteps){//判断是否有胜利者if(winnner!null){//已经存在胜利者了returntrue;}{if(steps100){winnnerThread.currentThread().getName();System.out.println(winner is winnner);returntrue;}}returnfalse;}publicstaticvoidmain(String[]args){RaceracenewRace();newThread(race,兔子).start();newThread(race,乌龟).start();}}结果实现Callable接口(了解即可)代码packagecom.jiang.lesson2;importorg.apache.commons.io.FileUtils;importjava.io.File;importjava.net.URL;importjava.util.concurrent.*;publicclassTestCallableimplementsCallableBoolean{privateStringurl;//网络图片地址privateStringname;//保存的文件名publicTestCallable(Stringurl,Stringname){//构造方法this.urlurl;this.namename;}//下载图片线程的执行体OverridepublicBooleancall(){WebDownloaderwebDownloadernewWebDownloader();webDownloader.downloader(url,name);System.out.println(下载文件名为name);returntrue;}publicstaticvoidmain(String[]args)throwsExecutionException,InterruptedException{TestCallablet1newTestCallable(https://i0.hdslb.com/bfs/archive/b906001449553663f1a39a7d940fa078dc9fc5a7.jpg,1.jpg);TestCallablet2newTestCallable(https://i0.hdslb.com/bfs/archive/bd3b4b731a45f131f4bab6e5bd453bb7cc2efcb7.jpg,2.jpg);//创建执行服务ExecutorServiceserExecutors.newFixedThreadPool(3);//提交执行FutureBooleanr1ser.submit(t1);FutureBooleanr2ser.submit(t2);//获取结果booleanrs1r1.get();booleanrs2r2.get();System.out.println(rs1);System.out.println(rs2);//关闭服务ser.shutdown();}//下载器classWebDownloader{//下载方法publicvoiddownloader(Stringurl,Stringname){try{FileUtils.copyURLToFile(newURL(TestCallable.this.url),newFile(TestCallable.this.name));}catch(Exceptione){e.printStackTrace();System.out.println(IO异常);}}}}结果静态代理代码packagecom.jiang.lesson2;//静态代理模式总结//真实对象和代理对象都要实现同一个接口//代理对象要代理真实角色//好处//代理对象可以做很多真实对象做不了的事情//真实对象专注做自己的事情publicclassStacticProxy{publicstaticvoidmain(String[]args){YouyounewYou();//你要结婚newThread(()-System.out.println(我爱你)).start();newWeddingCompany(newYou()).HappyMarry();}}interfaceMarry{voidHappyMarry();}//真实角色你去结婚classYouimplementsMarry{OverridepublicvoidHappyMarry(){System.out.println(楼侠要结婚了超开心);}}//代理角色帮助你结婚classWeddingCompanyimplementsMarry{//代理唯一--真实目标角色privateMarrytarget;publicWeddingCompany(Marrytarget){this.targettarget;}OverridepublicvoidHappyMarry(){before();this.target.HappyMarry();//这就是真实对象after();}privatevoidbefore(){System.out.println(结婚之前);}privatevoidafter(){System.out.println(结婚之后);}}结果Lambda表达式代码逐渐简化packagecom.jiang.lesson2;/* 推导Lambda表达式 */publicclassTestLambda1{//3.静态内部类staticclassLike2implementsILike{Overridepublicvoidlambda(){System.out.println(i like lambda2);}}publicstaticvoidmain(String[]args){ILikelikenewLike();like.lambda();likenewLike2();like.lambda();//4.局部内部类classLike3implementsILike{Overridepublicvoidlambda(){System.out.println(i like lambda3);}}likenewLike3();like.lambda();//5.匿名内部类没有类的名称必须借助接口或父类//一次性使用new 接口{}likenewILike(){Overridepublicvoidlambda(){System.out.println(i like lambda4);}};like.lambda();//6.用lambda简化like()-{System.out.println(i like lambda5);};like.lambda();}}//1.定义一个函数式接口interfaceILike{voidlambda();//抽象方法}//2.实现类实现接口方法 与父类不同只是合同工无需像子类一样继承全部父类classLikeimplementsILike{Overridepublicvoidlambda(){System.out.println(i like lambda);}}结果代码精简版packagecom.jiang.lesson2;publicclassTestLambda2{publicstaticvoidmain(String[]args){//lambda表示简化ILovelove(inta)-{System.out.println(i love you--a);};//简化1参数类型love(a)-{System.out.println(i love you--a);};//简化2简化括号lovea-{System.out.println(i love you--a);};//简化3去掉花括号lovea-System.out.println(i love you--a);//总结//lambda表达式只能有一行代码的情况下才能简化成为一行如果有多行那么就用代码块包裹//前提是接口为函数式接口//多个参数也可以去掉参数类型要去掉就都去掉必须加上括号love.love(123);}}interfaceILove{voidlove(inta);//无方法体只是声明形参}结果我没把其他方法注释掉lambda只能有一个输入所以只有一个结果