**一.
程序:
进程:
线程:
小结:
1. 继承Thread类 2. 继承Thread类 3. 重写run()方法 4. 通过< 子类对象.start()>启动这个线程
实例:
package java_demo.多线程;import org.apachemons.io.FileUtils;import java.io.File;
import java.io.IOException;
import java.URL;//通过多线程下载网络图片
public class Thread_download extends Thread{private String name;private String url;public Thread_download(String name, String url) {this.name = name;this.url = url;}public void run(){Download download = new Download();download.download(url,name);System.out.println("已经下载图片到"+name);}public static void main(String[] args) {Thread_download test1 = new Thread_download("test1", "=24336452,906724543&fm=26&gp=0.jpg");Thread_download test2 = new Thread_download("test2", "=3649178992,1821853682&fm=26&gp=0.jpg");Thread_download test3 = new Thread_download("test3", "=3401732207,3726302783&fm=26&gp=0.jpg");test1.start();test2.start();test3.start();}
}
class Download{public void download(String url,String name){try {pyURLToFile(new URL(url),new File(name));} catch (IOException e) {e.printStackTrace();System.out.println("下载器异常!!!");}}
}
1. 实现Runnable接口 2. 实现Runnable接口 3. 定义无参run()方法 4. 通过<传入目标对象+Thread对象.start()>启动这个线程
实例:
package java_demo.多线程;import org.apachemons.io.FileUtils;import java.io.File;
import java.io.IOException;
import java.URL;public class Runnable_download implements Runnable{private String name;private String url;public Runnable_download(String name, String url) {this.name = name;this.url = url;}@Overridepublic void run() {Download download = new Download();download.download(url,name);System.out.println("已经下载图片到"+name);}public static void main(String[] args) {Runnable_download test1 = new Runnable_download("test1", "=24336452,906724543&fm=26&gp=0.jpg");Runnable_download test2 = new Runnable_download("test2", "=3649178992,1821853682&fm=26&gp=0.jpg");Runnable_download test3 = new Runnable_download("test3", "=3401732207,3726302783&fm=26&gp=0.jpg");new Thread(test1).start();new Thread(test2).start();new Thread(test3).start();}}
class Downloads{public void download(String url,String name){try {pyURLToFile(new URL(url),new File(name));} catch (IOException e) {e.printStackTrace();System.out.println("下载器异常!!!");}}
}
小结
优点
语法格式
总结
实例
package java_demo.多线程;
//静态代理模式
/*
1.真实的角色
2.代理角色
3.共同实现的接口*/
public class Thread_proxy {public static void main(String[] args) {Weeding weeding = new Weeding(new You());weeding.Happymarry();}
}
interface Marry
{void Happymarry();
}class You implements Marry
{@Overridepublic void Happymarry() {System.out.println("我要结婚了,超级开心!!!");}
}class Weeding implements Marry
{private Marry marry;public Weeding(Marry marry) {this.marry = marry;}@Overridepublic void Happymarry() {before();this.marry.Happymarry();after();}public void before(){System.out.println("结婚之前布置现场!!");}public void after(){System.out.println("结婚之后数钱!!!");}}
实例
package java_demo.多线程;/*
线程停止
1.建议线程正常停止——————>利用次数
2.建议使用标志位
3.不建议使用stop或destroy等过时且jdk不建议使用的方法*/
public class Thread_stop implements Runnable{private boolean flag = true;@Overridepublic void run() {int i = 0;while (flag){System.out.println("runTread"+i++);}}public void stop(){this.flag = false;}public static void main(String[] args) {Thread_stop thread_stop = new Thread_stop();new Thread(thread_stop).start();for (int i = 0; i < 200; i++) {System.out.println("mainThread"+i);if (i==100){thread_stop.stop();System.out.println("run线程已经停止!!!");}}}
}
实例:
package java_demo.多线程;/*
模拟倒计时*/
public class Thread_sleep {public static void main(String[] args) {sleep();}public static void sleep(){int num = 10;while (true){System.out.println("倒计时:"+num--);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}if (num<=0){break;}}}
}
实例:
package java_demo.多线程;public class Thread_yield {public static void main(String[] args) {MyYield myYield = new MyYield();new Thread(myYield,"A").start();new Thread(myYield,"B").start();}
}class MyYield implements Runnable
{@Overridepublic void run() {System.out.println(Thread.currentThread().getName()+"线程开始执行!!");Thread.yield();System.out.println(Thread.currentThread().getName()+"线程结束执行!!");}
}9.线程强制执行(插队)
join合并线程,待此线程结束以后再执行其他线程,其他线程阻塞。
实例
package java_demo.多线程;public class Thread_join implements Runnable{@Overridepublic void run() {for (int i = 0; i < 200; i++) {System.out.println("我是vip线程!!我正在执行第"+i);}}public static void main(String[] args) {Thread_join thread_join = new Thread_join();Thread thread = new Thread(thread_join);thread.start();for (int i = 0; i < 500; i++) {System.out.println("我是主线程,我正在执行!!第"+i);if (i == 200){try {thread.join();} catch (InterruptedException e) {e.printStackTrace();}}}}
}
设置线程优先级
对象.setpriority(int n) (0<=n<=10)
获取线程优先级
对象.getpriority(int n)
*线程优先级高并不一定代表先调度,只是说概率提高了。
实例
package java_demo.多线程;public class Thread_priority {public static void main(String[] args) {System.out.println(Thread.currentThread().getName()+"————————>"+Thread.currentThread().getPriority());Mypriority mypriority = new Mypriority();Thread thread1 = new Thread(mypriority,"a");Thread thread2 = new Thread(mypriority,"b");Thread thread3 = new Thread(mypriority,"c");Thread thread4 = new Thread(mypriority,"d");Thread thread5 = new Thread(mypriority,"e");thread1.start();thread2.setPriority(3);thread2.start();thread3.setPriority(5);thread3.start();thread4.setPriority(7);thread4.start();thread5.setPriority(10);thread5.start();}}
class Mypriority implements Runnable
{@Overridepublic void run() {System.out.println(Thread.currentThread().getName()+"————————>"+Thread.currentThread().getPriority());}
}
实例
package java_demo.多线程;
/*
守护线程*/
public class Thread_deamon {public static void main(String[] args) {Gad gad = new Gad();Me me = new Me();Thread thread = new Thread(gad);thread.setDaemon(true);//false代表用户线程thread.start();new Thread(me).start();}
}
class Gad implements Runnable
{@Overridepublic void run() {while (true){System.out.println("上帝守护着你!!");}}
}class Me implements Runnable
{@Overridepublic void run() {for (int i = 0; i < 100; i++) {System.out.println("开开心心活着第"+i+"年!");}System.out.println("goodbye world!!!!!!");}
}
*通俗一点来讲,线程同步就像很多人排队去用一个厕所,前面的人进去以后把锁锁上,结束以后把锁打开,下一个进去把锁锁上…
优点:确保了数据在方法中被访问的正确性,安全性。
缺点:降低效率,一个线程持有锁会导致其他需要此锁的线程挂起。(鱼跟熊掌不可兼得)
背景
思路
优点
实例:
package java_demo.多线程;import urrent.Executor;
import urrent.ExecutorService;
import urrent.Executors;public class Thread_pool {public static void main(String[] args) {//创建线程池ExecutorService server = wFixedThreadPool(10);Pool pool = new Pool();ute(pool);ute(pool);ute(pool);ute(pool);ute(pool);//关闭连接server.shutdown();}
}
class Pool implements Runnable
{@Overridepublic void run() {System.out.println(Thread.currentThread().getName());}
}
本文发布于:2024-01-28 00:40:43,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063736443604.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |