线程创建的方式是什么
发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,本篇内容介绍了"线程创建的方式是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Thread 、R
千家信息网最后更新 2024年11月23日线程创建的方式是什么
本篇内容介绍了"线程创建的方式是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
Thread 、Runnable、Callable三种方式
创建一个新的执行线程有两种方法。 一个是将一个类声明为Thread的子类。 这个子类应该重写run类的方法Thread 。 然后可以分配并启动子类的实例。 例如,计算大于规定值的素数的线程可以写成如下:
package com.example.thread.class1;// 实现多线程的第一种方法,继承 Thread 类,重写 run ,调用 start 方法开启线程public class TestThread1 extends Thread{@Override public void run() {// 线程方法体 for (int i = 0; i < 2000; i++) { System.out.println("我在看代码****"+i); } }public static void main(String[] args) {//创建一个线程对象 TestThread1 thread1 = new TestThread1(); thread1.start(); // 主线程 for (int i = 0; i < 2000; i++) { System.out.println("我在学习多线程****"+i); } }}
线程开启不一定立即执行,由cpu调度
实现多线程下载图片
package com.example.thread.class1;import org.apache.commons.io.FileUtils;import java.io.File;import java.io.IOException;import java.net.MalformedURLException;import java.net.URL;// 实现多线程同步下载图片 2public class TestThread2 extends Thread { String url; // 网络图片地址 String name; // 保存文件名 public TestThread2(String url,String name){this.url =url; this.name =name; }@Override public void run() { downLoader loader = new downLoader(); try { loader.downLoad(url,name); System.out.println("下载的图片"+name); } catch (MalformedURLException e) { e.printStackTrace(); } }public static void main(String[] args) { TestThread2 thread1 = new TestThread2("https://img-pre.ivsky.com/img/tupian/pre/202103/04/sunyunzhu_heise_lianyiqun-006.jpg","1"); TestThread2 thread2 = new TestThread2("https://img-pre.ivsky.com/img/tupian/pre/202103/04/sunyunzhu_heise_lianyiqun-006.jpg","2"); TestThread2 thread3 = new TestThread2("https://img-pre.ivsky.com/img/tupian/pre/202103/04/sunyunzhu_heise_lianyiqun-006.jpg","3"); thread1.start(); thread2.start(); thread3.start(); }}// 下载器 WebdownLoaderclass downLoader{public void downLoad(String url,String name) throws MalformedURLException {try { FileUtils.copyURLToFile(new URL(url),new File(name)); } catch (IOException e) { e.printStackTrace(); System.out.println("IO异常,downloader 方法出现问题"); } }}
另一种方法来创建一个线程是声明实现类Runnable接口。 那个类然后实现了run方法。 然后可以分配类的实例,在创建Thread时作为参数传递,并启动。 这种其他风格的同一个例子如下所示:
package com.example.thread.class1;import org.apache.commons.io.FileUtils;import java.io.File;import java.io.IOException;import java.net.MalformedURLException;import java.net.URL;// 实现多线程同步下载图片 2public class TestThread2 implements Runnable { String url; // 网络图片地址 String name; // 保存文件名 public TestThread2(String url,String name){this.url =url; this.name =name; }@Override public void run() { downLoader loader = new downLoader(); try { loader.downLoad(url,name); System.out.println("下载的图片"+name); } catch (MalformedURLException e) { e.printStackTrace(); } }public static void main(String[] args) { TestThread2 thread1 = new TestThread2("https://img-pre.ivsky.com/img/tupian/pre/202103/04/sunyunzhu_heise_lianyiqun-006.jpg","1"); TestThread2 thread2 = new TestThread2("https://img-pre.ivsky.com/img/tupian/pre/202103/04/sunyunzhu_heise_lianyiqun-006.jpg","2"); TestThread2 thread3 = new TestThread2("https://img-pre.ivsky.com/img/tupian/pre/202103/04/sunyunzhu_heise_lianyiqun-006.jpg","3"); new Thread(thread1).start(); new Thread(thread2).start(); new Thread(thread3).start(); }}// 下载器 WebdownLoaderclass downLoader{public void downLoad(String url,String name) throws MalformedURLException {try { FileUtils.copyURLToFile(new URL(url),new File(name)); } catch (IOException e) { e.printStackTrace(); System.out.println("IO异常,downloader 方法出现问题"); } }}
多线程中的静态代理模式
1.真实角色(委托对象)
2.代理角色
3.共同实现的接口
package com.example.demo.class1;import java.lang.reflect.WildcardType;/** * 静态代理模式: * 真实对象和代理对象都要同时实现同一个接口 * * 好处: * 代理对象可以做很多真实对象做不了的事情 * 真实对象就专注自己的事情 */public class StacticProxy { public static void main(String[] args) {// new Thread( ()->System.out.println("我爱你")).start(); new WeddingCompany(new You()).HappyMarry(); /*WeddingCompany weddingCompany = new WeddingCompany(new You()); weddingCompany.HappyMarry();*/ }}interface Marry{ void HappyMarry();}// 真实角色,你去结婚class You implements Marry{ @Override public void HappyMarry() { System.out.println("陈老师要结婚了....."); }}// 代理角色,帮助你结婚class WeddingCompany implements Marry{ private Marry target; // 需要代理的对象,真实的对象 public 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("结婚前布置现场..."); }}
"线程创建的方式是什么"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
线程
对象
方法
图片
代理
结婚
角色
方式
子类
接口
事情
内容
地址
实例
文件
文件名
更多
模式
知识
网络
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
用友数据库安装没反应
江苏专业软件开发销售公司
电子邮件服务器未响应
河北电脑软件开发如何收费
职高学网络技术
玄元剑仙有多少服务器
深圳市潮流网络技术...
街道 网络安全领导小组
生动的网络技术讲解
利用网络技术进行教学设计
智能手机软件开发教程电子版
城市经济数据库
南山靠谱网络数据库维护
青少年法制宣教中心软件开发
商品分类表数据库
宝山区私人软件开发诚信合作
什么是信创网络安全
服务器的架设与管理
软件开发工作年龄
常见个人网络安全防护措施
网络安全领域的创新成果
软件开发面试要问什么
学校部署服务器的好处
玛莎在线网络技术有限公司
数据库表连接和子查询的区别
检察院网络安全宣传内容包括
数据库网状模型的概念
江门一川网络技术有限公司
风机通信网络安全
车联网网络安全公司排名