多线程
1、创建线程
-
方式一
继承Thread类,重写run()方法,调用start方法开启线程
package com.study; public class TestThread extends Thread{ public void run(){ for (int i = 0; i < 100; i++) { System.out.println("hello world"+i); } } public static void main(String[] args) { //main线程,主线程 TestThread testThread = new TestThread(); testThread.start(); for (int i = 0; i < 200; i++) { System.out.println("我是主线程"+i); } } } -
方式二
实现Runnable接口
package com.study; public class TestRunnable implements Runnable{ @Override public void run() { for (int i = 0; i < 30; i++) { System.out.println("hello world"+i); } } public static void main(String[] args) { TestRunnable testRunnable = new TestRunnable(); new Thread(testRunnable).start(); for (int i = 0; i < 60; i++) { System.out.println("主线程"+i); } } }2.练习1: 实现多线程同步下载图片
package com.study; import org.apache.commons.io.FileUtils; import org.omg.CORBA.StringHolder; import java.io.File; import java.io.IOException; import java.net.URL; public class TestThread2 extends Thread{ private String url; //图片地址名 private String name; //定义图片名 public TestThread2(String url, String name){ this.url = url; this.name = name; } public void run(){ WebDownloader webDownloader = new WebDownloader(); webDownloader.downloader(url,name); System.out.println("下载文件名:"+name); } public static void main(String[] args) { TestThread2 t1 = new TestThread2("https://img2020.cnblogs.com/blog/1887105/202103/1887105-20210312200240114-635118268.png","1.png"); TestThread2 t2 = new TestThread2("https://img2020.cnblogs.com/blog/1887105/202103/1887105-20210312200300521-827686531.png","2.png"); t1.start(); t2.start(); } } //下载器 class WebDownloader{ public void downloader(String url,String name){ try { FileUtils.copyURLToFile(new URL(url),new File(name)); } catch (IOException e) { e.printStackTrace(); System.out.println("捕获异常"); } } }3.练习2:龟兔赛跑
package com.study; public class Race implements Runnable{ private static String winner; //静态变量 @Override public void run() { //100米赛道 for (int i = 1; i <= 100; i++) { System.out.println(Thread.currentThread().getName()+"跑了"+i+"米"); if (gameOver(i)){ break; } if (Thread.currentThread().getName().equals("rabbit") && i%10==0){ try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } } } //判断游戏结束 public boolean gameOver(int step){ boolean flag=false; if (step >= 100){ winner = Thread.currentThread().getName(); System.out.println("winner is "+winner); } if (winner!=null){ flag = true; } return flag; } public static void main(String[] args) { //一条赛道 Race race = new Race(); new Thread(race,"rabbit").start(); new Thread(race,"turtle").start(); } }4.静态代理模式
package com.study; //静态代理模式 public class StaticProx { } interface Marry{ public void HappyMarry(); } class You implements Marry{ @Override public void HappyMarry() { System.out.println("I'm very happy!"); } } class WeddingCompany implements Marry{ private Marry target; WeddingCompany(Marry target){ this.target = target; } @Override public void HappyMarry() { before(); this.target.HappyMarry(); after(); } private void after() { System.out.println("结婚后,收尾款"); } private void before(){ System.out.println("结婚前,布置现场"); } public static void main(String[] args) { // You you = new You(); // WeddingCompany weddingCompany = new WeddingCompany(you); WeddingCompany weddingCompany = new WeddingCompany(new You()); weddingCompany.HappyMarry(); } }

浙公网安备 33010602011771号