当前位置: 首页 > news >正文

江苏连云港做网站明月wordpress

江苏连云港做网站,明月wordpress,固安县建设局网站,域名备案需要有网站吗多线程#xff1a; 线程 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中#xff0c;是进程中的实际运作单位 并发:在同一时刻#xff0c;有多个指令在单个cpu上交替执行 并行:在同一时刻#xff0c;有多个指令在多个cpu上同时执行 多线程的实现方式 1.继承…多线程 线程 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中是进程中的实际运作单位 并发:在同一时刻有多个指令在单个cpu上交替执行 并行:在同一时刻有多个指令在多个cpu上同时执行 多线程的实现方式 1.继承Thread类的方式进行实现 2.实现Runnable接口的方式进行实现 3.利用Callable接口和Future接口方式实现 Thread 第一步自己定义一个类继承Thread 第二步重写run方法 第三步创建子类的对象并启动线程 //创建子类的对象Demo2myThread t1 new Demo2myThread();Demo2myThread t2 new Demo2myThread();t1.setName(线程1); //setName在Thread类里t2.setName(线程2);//开启线程t1.start();t2.start();//可以看到线程1和线程2是交互执行的 public class Demo2myThread extends Thread{Overridepublic void run() {//书写线程要执行的代码for (int i 0; i 100; i) {System.out.println(getName()HelloWorld); //getName在Thread类中}} } Runnable 第一步先自己定义一个类实现Runnable接口 第二步重写里面的Runnable方法 第三步创建自己的类的对象 第四步创建一个Thread类的对象并开启线程 package com.itheima.demo15多线程;public class Demo3 {public static void main(String[] args) {//Runnable//第一步先自己定义一个类实现Runnable接口//第二步重写里面的Runnable方法//第三步创建自己的类的对象//第四步创建一个Thread类的对象并开启线程//创建Demo3MyRun的对象//表示多线程要执行的任务Demo3MyRun mr new Demo3MyRun();//创建线程对象Thread t1 new Thread(mr);Thread t2 new Thread(mr);t1.setName(线程1);t2.setName(线程2);//开启线程t1.start();t2.start();} }public class Demo3MyRun implements Runnable{Overridepublic void run() {//书写线程要执行的代码for (int i 0; i 100; i) {//先获取到当前线程的对象Thread t Thread.currentThread();System.out.println(t.getName()HelloWorld); //因为getName是Thread里的所以这里不能直接用}} } 利用Callable接口和Future接口方式实现 特点:可以获取到多线程运行的结果 第一步:创建一个类MyCallable实现Callable接口 第二步:重写call(是有返回值的表示多线程运行的结果) 第三步:创建MyCallable的对象(表示多线程要执行的任务) 第四步:创建FutureTask(因为Future是接口)的对象(作用管理多线程运行的结果) 第五步:创建Thread类的对象,并启动(表示线程) //创建MyCallable的对象Demo4MyCallable mc new Demo4MyCallable();//创建FutureTask的对象FutureTaskInteger ft new FutureTask(mc);//创建线程的对象Thread t1 new Thread(ft);//启动线程t1.start();//获取多线程运行的结果Integer result ft.get();System.out.println(result);package com.itheima.demo15多线程;import java.util.concurrent.Callable;public class Demo4MyCallable implements CallableInteger {Overridepublic Integer call() throws Exception {//求1-100之间的和int sum0;for (int i 1; i 100; i) {sumi;}return sum ;} }Thread中常见的成员方法 方法名称                                              说明 String getName()                                  返回此线程的名称 void setName(String name)                         设置线程的名字(构造方法也可以设置名字) static Thread currentThread()                     获取当前线程的对象 static void sleep(long time)                      让线程休眠指定的时间单位为毫秒 setPriority(int newPriority)                      设置线程的优先级最小1最大10,默认5,越大优先级越高) final int getPriority()                           获取线程的优先级 final void setDaemon(boolean on)                  设置为守护线程 public static void yield()                        出让线程/礼让线程 public static void join()                         插入线程/插队线程 void setName(String name) 细节:如果我们没有给线程设置名字线程也是有默认的名字的:Thread-x(x起始为0) static Thread currentThread() 细节: 获取当前线程的对象 当Java虚拟机启动之后会自动的启动多条线程 其中有一条线程就叫做main线程 他的作用就是去调用main方法并执行里面的代码 在以前我们写的所有的代码其实都是运行在main线程当中 static void sleep(long time) 细节: 1、哪条线程执行到这个方法那么哪条线程就会在这里停留对应的时间 2、方法的参数:就表示睡眠的时间单位毫秒 3、当时间到了之后线程会自动的醒来继续执行下面的其他代码 setPriority(int newPriority) final int getPriority() t1.setPriority(1);    //设置优先级为1 t2.setPriority(10);   //设置优先级为10 System.out.println(t1.setPriority());     //输出t1的优先级 final void setDaemon(boolean on) 细节: 当其他的非守护线程执行完毕之后守护线程会陆续结束(不是立马结束) 通俗易懂: 当非守护线程结束了那么守护线程也没有存在的必要了 t2.setDaemon(true);           //开启守护线程 public static void yield() 在重写的run方法里:Thread.yield();    //表示出让当前cpu的执行权尽可能会让结果均匀一些,不是绝对的 就是当前线程弄完之后就会出让cpu的执行权 public static void join() t1.join();    //表示把t1这个线程插入到当前线程之前 线程安全的问题 需求: 某电影院目前正在上映国产大片共有100张票而它有3个窗口卖票请设计一个程序模拟该电影院卖票 买票引发的安全问题:   //相同的票出现了多次   //出现了超出范围的票 解决方法同步代码锁(把操作共享数据的代码锁起来) 格式: synchronized (锁){     (注意锁对象一定要唯一:就是前面加个static) 操作共享数据的代码 } 特点1:锁默认打开有一个线程进去了锁自动关闭 特点2:里面的代码全部执行完毕线程出来锁自动打开 //创建线程对象Demo7myThread t1 new Demo7myThread();Demo7myThread t2 new Demo7myThread();Demo7myThread t3 new Demo7myThread();//起名字t1.setName(窗口1);t2.setName(窗口2);t3.setName(窗口3);//开启线程t1.start();t2.start();t3.start();package com.itheima.demo15多线程;public class Demo7myThread extends Thread{static int ticket 0;Overridepublic void run() {while (true) {synchronized (Demo7myThread.class){ //细节1synchronized要放在循环里面if(ticket100) { //细节2一般用类名.class用作锁的对象(当前字节码文件对象)(锁对象一定要唯一)try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}ticket;System.out.println(getName() 正在卖 ticket张票);}else {break;}}}} }//同步方法:就是把synchronized关键字加到方法上     //格式:修饰符 synchronized 返回值类型 方法名(方法参数) {...}     //特点1:同步方法是锁住方法里面所有的代码     //特点2:锁对象不能自己指定(非静态: this,静态:当前类的字节码文件对象) static int ticket0;Overridepublic void run() {//1.循环while(true){//2.(同步方法)if (method()) break;}}private synchronized boolean method() { //此时方法是非静态的它的锁对象是thisif(ticket100)return true;else {try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}ticket;System.out.println(Thread.currentThread()正在卖 ticket张票);}return false;}线程池 线程池只要核心原理: 1.创建一个池子池子中是空的 2.提交任务时池子会创建新的线程对象任务执行完毕线程归还给池子 下回再次提交任务时不需要创建新的线程直接复用已有的线程即可 3.但是如果提交任务时池子中没有空闲线程也无法创建新的线程任务就会排队等待 线程池代码实现 Executors:线程池的工具类通过调用方法返回不同类型的线程池对象 方法名称                                                                                             说明 public static ExecutorService newCachedThreadPool()                               创建一个没有上限的线程池(上限是int类型的最大值) public static ExecutorService newFixedThreadPool(int nThreads)                    创建有上限的线程池 网络编程:    网络编程:在网络通信协议下不同计算机上运行的程序进行的数据传输。 不管是什么场景都是计算机跟计算机之间通过网络进行数据传输,数据传输就需要网络编程 C/S:客户端/服务器 B/S:浏览器/服务器 BS架构的优缺点 不需要开发客户端只需要页面服务端 用户不需要下载打开浏览器就能使用 如果应用过大用户体验受到影响 CS架构的优缺点 画面可以做的非常精美用户体验好 需要开发客户端也需要开发服务端 //static InetAddress getByName(string host)      确定主机名称的IP地址。主机名称可以是机器名称也可以是IP地址         //String getHostName()                          获取此IP地址的主机名         //String getHostAddress()                       返回文本显示中的IP地址字符串   //1.获取InetAddress的对象//IP的对象InetAddress address InetAddress.getByName(snow);System.out.println(address);String name address.getHostName();//获取电脑的主机名System.out.println(name);String ip address.getHostAddress();//获取电脑的IPSystem.out.println(ip); 端口号 应用程序在设备中唯一的标识。 端口号:由两个字节表示的整数取值范围:0~65535 其中0~1023之间的端口号用于一些知名的网络服务或者应用 我们自己使用1024以上的端口号就可以了 注意:一个端口号只能被一个应用程序使用 UDP协议 用户数据报协议(User Datagram Protocol) UDP是面向无连接通信协议。 速度快有大小限制一次最多发送64K数据不安全易丢失数据 TCP协议 传输控制协议TCP(Transmission control Protocol TCP协议是面向连接的通信协议。 速度慢没有大小限制数据安全 //1.创建DatagramSocket对象(快递公司)//细节://绑定端口:以后我们就是通过这个端口往外发送//空参:所有可用的端口中随机一个进行使用//有参:指定端口号进行绑定DatagramSocket ds new DatagramSocket(); //单播是创建这个//2.打包数据String str 你好;byte[] bytes str.getBytes();//只能发字节数据InetAddress address InetAddress.getByName(127.0.0.1);int port10086;DatagramPacket dp new DatagramPacket(bytes,bytes.length,address,port);//(要发的数据数据的长度,往哪台电脑发发到哪个端口上)//3.发送数据ds.send(dp);//4.释放资源ds.close(); //UDP通信程序(接收数据)//1.创建DatagramSocket对象(快递公司)//细节://在接收的时候一定要绑定端口//而且绑定的端口一定要跟发送的端口保持一致DatagramSocket ds2 new DatagramSocket(10086);//2.接收数据包byte[] bytes2 new byte[1024];DatagramPacket dp2 new DatagramPacket(bytes2,bytes2.length); //(接收放到的地方接收放到的地方的长度)//该方法是阻塞的//程序执行到这一步的时候会在这里死等//等发送端发送消息ds2.receive(dp2);//3.解析数据包byte[] data dp2.getData(); //获取数据int len dp2.getLength(); //获取多少个字节数据InetAddress address1 dp2.getAddress(); //获取从哪台电脑发来的int port1 dp2.getPort(); //获取从哪个端口发来的System.out.println(接收到数据 new String(data,0,len));System.out.println(该数据是从 address1 这台电脑中的 port1 这个端口发出的);//4.释放资源ds2.close(); 单播:以前的代码就是单播 组播:组播驰址:224.0.0.0~239.255.255.255 其中224.0.0.0~224.0.0.255 为预留的组播地址 广播:255.255.255.255 //1.创建MulticastSocket对象MulticastSocket ms new MulticastSocket(); //组播创建这个//2.打包数据String str 你好;byte[] bytes str.getBytes();//只能发字节数据InetAddress address InetAddress.getByName(224.0.0.2);int port10086;DatagramPacket dp new DatagramPacket(bytes,bytes.length,address,port);//(要发的数据数据的长度,往哪台电脑发发到哪个端口上)//3.发送数据ms.send(dp);//4.释放资源ms.close(); //1.创建 MulticastSocket对象MulticastSocket ms new MulticastSocket(10086);//2.将当前本机添加到224.0.0.1的这一组当中InetAddress address InetAddress.getByName(224.0.0.2);ms.joinGroup(address);//3.接收数据包byte[] bytes2 new byte[1024];DatagramPacket dp2 new DatagramPacket(bytes2,bytes2.length); //(接收放到的地方接收放到的地方的长度)//该方法是阻塞的//程序执行到这一步的时候会在这里死等//等发送端发送消息ms.receive(dp2);//4.解析数据包byte[] data dp2.getData(); //获取数据int len dp2.getLength(); //获取多少个字节数据InetAddress address1 dp2.getAddress(); //获取从哪台电脑发来的int port1 dp2.getPort(); //获取从哪个端口发来的System.out.println(接收到数据 new String(data,0,len));System.out.println(该数据是从 address1 这台电脑中的 port1 这个端口发出的);//5.释放资源ms.close(); TCP通信程序 TCP通信协议是一种可靠的网络协议它在通信的两端各建立一个Socket对象 通信之前要保证连接已经建立 通过Socket产生IO流来进行网络通信 客户端(Socket)---输出流----   通信之前要保证连接已经建立      ----输入流----服务器端(SeverSocket) 客户端 创建客户端的Socket对象(Socket)与指定服务端连接 Socket(string host, int port)         (服务器的ip,端口号) 获取输出流写数据 OutputStream getOutputStream() 释放资源 void close() 服务器端: 创建服务器端的Socket对象(ServerSocket) ServerSocket(int port)    (此时服务器绑定的端口要和客户端绑定的端口保持一致) 监听客户端连接返回一个Socket对象 Socket accept() 获取输入流读数据并把数据显示在控制台 InputStream getInputStream() 释放资源 void close()
http://www.dnsts.com.cn/news/121072.html

相关文章:

  • wordpress博客站搭建珲春住房和城乡建设局网站
  • 嘉兴网站建设企业网站制作设计图案
  • 网站rp原型图怎么做网站是由什么组成的
  • 济南的网站建设公司课程资源网站的建设
  • 做调查的网站‘网络营销知识点
  • 化妆品网站模板免费下载wordpress 屏蔽搜索引擎
  • 视频作品投票网站如何做中山做网站的公司
  • dz论坛做分类网站个人性质网站
  • 网站的二次开发做图片网站赚钱吗
  • 做网站退款怎么做会计分录企业资源管理软件
  • dw表格怎么做网站搜索如何进行app推广
  • seo sem 外贸建站 网站建设 文化墙设计wordpress 推广返利
  • 青岛网站建设制作公司雅安北京网站建设
  • 天河建设网站多少钱老闵行的房子值得买吗
  • 建材在哪些网站做东莞做汽车有没有买票的网站
  • 做网站特别简单的软件专业建设专业网站制作公司
  • 一个虚拟空间做两个网站唐山网站怎么做seo
  • 武威网站建设广告创意设计作品
  • 北京网站建设方案建设公司申请网站域名怎么做网站
  • 北京朝阳网站阿毛免费模板网
  • 便宜网站建设成都微型网站 源码
  • 单页网站有后台重庆市建设工程交易中心网站
  • 阿里建设网站怎么评价一个网站做的好否
  • 购物网站有哪些比较有名的小型网站商城建设
  • 江山建设工程信息网站免费ppt生成器
  • 优秀网站设计分析app开发哪个公司专业
  • 网站网域名查询网站 设计 工具
  • 郑州%公司 网站建设广州网站建设比较好的公司
  • 营销网站试用外贸营销网站推广
  • 大同网站建设熊掌号怎么下载河北人社app