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

网站制作的步骤不包括哪些怎样制作表白网站

网站制作的步骤不包括哪些,怎样制作表白网站,国家公示系统官网,怎样撰写企业网站建设方案请戳GitHub原文: https://github.com/wangzhiwubigdata/God-Of-BigData大数据成神之路系列#xff1a;请戳GitHub原文: https://github.com/wangzhiwubigdata/God-Of-BigDataJava高级特性增强-集合Java高级特性增强-多线程Java高级特性增强-SynchronizedJava高级特性增强-vola…请戳GitHub原文: https://github.com/wangzhiwubigdata/God-Of-BigData大数据成神之路系列请戳GitHub原文: https://github.com/wangzhiwubigdata/God-Of-BigDataJava高级特性增强-集合Java高级特性增强-多线程Java高级特性增强-SynchronizedJava高级特性增强-volatileJava高级特性增强-并发集合框架Java高级特性增强-分布式Java高级特性增强-ZookeeperJava高级特性增强-JVMJava高级特性增强-NIOJava高级特性增强-多线程本部分网络上有大量的资源可以参考在这里做了部分整理感谢前辈的付出每节文章末尾有引用列表源码推荐看JDK1.8以后的版本注意甄别~ ####多线程 ###集合框架###NIO ###Java并发容器公众号全网唯一一个从0开始帮助Java开发者转做大数据领域的公众号~公众号大数据技术与架构或者搜索import_bigdata关注大数据学习路线最新更新已经有很多小伙伴加入了~Java高级特性增强-多线程本部分网络上有大量的资源可以参考在这里做了部分整理感谢前辈的付出每节文章末尾有引用列表源码推荐看JDK1.8以后的版本注意甄别~ ####多线程 ###集合框架###NIO ###Java并发容器多线程进程和多线程简介进程和线程进程和线程的对比这一知识点由于过于基础所以在面试中很少碰到但是极有可能会在笔试题中碰到。常见的提问形式是这样的“什么是线程和进程?请简要描述线程与进程的关系、区别及优缺点 ”。何为进程进程是程序的一次执行过程是系统运行程序的基本单位因此进程是动态的。系统运行一个程序即是一个进程从创建运行到消亡的过程。 或者我们可以这样说 进程是程序的一次执行过程是系统运行程序的基本单位因此进程是动态的。系统运行一个程序即是一个进程从创建运行到消亡的过程。简单来说一个进程就是一个执行中的程序它在计算机中一个指令接着一个指令地执行着同时每个进程还占有某些系统资源如CPU时间内存空间文件文件输入输出设备的使用权等等。换句话说当程序在执行时将会被操作系统载入内存中。何为线程线程与进程相似但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源所以系统在产生一个线程或是在各个线程之间作切换工作时负担要比进程小得多也正因为如此线程也被称为轻量级进程。何为多线程多线程就是多个线程同时运行或交替运行。单核CPU的话是顺序执行也就是交替运行。多核CPU的话因为每个CPU有自己的运算器所以在多个CPU中可以同时运行。为什么多线程是必要的个人觉得可以用一句话概括开发高并发系统的基础利用好多线程机制可以大大提高系统整体的并发能力以及性能。为什么提倡多线程而不是多进程线程就是轻量级进程是程序执行的最小单位。使用多线程而不是用多进程去进行并发程序的设计是因为线程间的切换和调度的成本远远小于进程。线程有什么优缺点1好处 使用多线程可以把程序中占据时间长的任务放到后台去处理如图片、视屏的下载。 发挥多核处理器的优势并发执行让系统运行的更快、更流畅用户体验更好。 2坏处 大量的线程降低代码的可读性。 更多的线程需要更多的内存空间。 当多个线程对同一个资源出现争夺时候要注意线程安全的问题。多线程中重要的概念同步和异步 同步和异步通常用来形容一次方法调用。同步方法调用一旦开始调用者必须等到方法调用返回后才能继续后续的行为。异步方法调用更像一个消息传递一旦开始方法调用就会立即返回调用者可以继续后续的操作。关于异步目前比较经典以及常用的实现方式就是消息队列在不使用消息队列服务器的时候用户的请求数据直接写入数据库在高并发的情况下数据库压力剧增使得响应速度变慢。但是在使用消息队列之后用户的请求数据发送给消息队列之后立即 返回再由消息队列的消费者进程从消息队列中获取数据异步写入数据库。由于消息队列服务器处理速度快于数据库消息队列也比数据库有更好的伸缩性因此响应速度得到大幅改善。并发(Concurrency)和并行(Parallelism) 并发和并行是两个非常容易被混淆的概念。它们都可以表示两个或者多个任务一起执行但是偏重点有些不同。并发偏重于多个任务交替执行而多个任务之间有可能还是串行的。而并行是真正意义上的“同时执行”。多线程在单核CPU的话是顺序执行也就是交替运行并发。多核CPU的话因为每个CPU有自己的运算器所以在多个CPU中可以同时运行并行。高并发 高并发High Concurrency是互联网分布式系统架构设计中必须考虑的因素之一它通常是指通过设计保证系统能够同时并行处理很多请求。高并发相关常用的一些指标有响应时间Response Time吞吐量Throughput每秒查询率QPSQuery Per Second并发用户数等。临界区 临界区用来表示一种公共资源或者说是共享数据可以被多个线程使用。但是每一次只能有一个线程使用它一旦临界区资源被占用其他线程要想使用这个资源就必须等待。在并行程序中临界区资源是保护的对象。阻塞和非阻塞 非阻塞指在不能立刻得到结果之前该函数不会阻塞当前线程而会立刻返回而阻塞与之相反。多线程的创建方式继承Thread类public class MyThread extends Thread {Overridepublic void run() {super.run();System.out.println(MyThread);} }实现Runnable接口public class MyRunnable implements Runnable {Overridepublic void run() {System.out.println(MyRunnable);} }线程池《阿里巴巴Java开发手册》在第一章第六节并发处理这一部分也强调到“线程资源必须通过线程池提供不允许在应用中自行显示创建线程”。 我们在实际开发环境中建议使用线程池的方式创建线程。public class ThreadPool {private static int POOL_NUM 10;public static void main(String[] args){ ExecutorService executorService Executors.newFixedThreadPool(5);for(int i 0; iPOOL_NUM; i){RunnableThread thread new RunnableThread();executorService.execute(thread);}} }class RunnableThread implements Runnable {private int THREAD_NUM 10;public void run(){for(int i 0; iTHREAD_NUM; i){System.out.println(线程 Thread.currentThread() i);} } }线程的生命周期线程一共有五个状态分别如下 新建(new) 当创建Thread类的一个实例对象时此线程进入新建状态未被启动。例如Thread t1 new Thread() 。可运行(runnable) 线程对象创建后其他线程(比如 main 线程调用了该对象的 start 方法。该状态的线程位于可运行线程池中等待被线程调度选中获取 cpu 的使用权。例如t1.start() 。运行(running) 线程获得 CPU 资源正在执行任务#run() 方法此时除非此线程自动放弃 CPU 资源或者有优先级更高的线程进入线程将一直运行到结束。 死亡(dead)当线程执行完毕或被其它线程杀死线程就进入死亡状态这时线程不可能再进入就绪状态等待执行。 自然终止 正常运行完 #run()方法终止。 异常终止 调用 #stop() 方法让一个线程终止运行。 堵塞(blocked) 由于某种原因导致正在运行的线程让出 CPU 并暂停自己的执行即进入堵塞状态。直到线程进入可运行(runnable)状态才有机会再次获得 CPU 资源转到运行(running)状态。阻塞的情况有三种 正在睡眠 调用 #sleep(long t) 方法可使线程进入睡眠方式。 一个睡眠着的线程在指定的时间过去可进入可运行(runnable)状态。 正在等待 调用 #wait() 方法。 调用 notify() 方法回到就绪状态。 被另一个线程所阻塞 调用 #suspend() 方法。 调用 #resume() 方法就可以恢复。线程的优先级每个线程都具有各自的优先级线程的优先级可以在程序中表明该线程的重要性如果有很多线程处于就绪状态系统会根据优先级来决定首先使哪个线程进入运行状态。但这个并不意味着低。 优先级的线程得不到运行而只是它运行的几率比较小如垃圾回收机制线程的优先级就比较低。所以很多垃圾得不到及时的回收处理。线程优先级具有继承特性比如A线程启动B线程则B线程的优先级和A是一样的。线程优先级具有随机性也就是说线程优先级高的不一定每一次都先执行完。Thread类中包含的成员变量代表了线程的某些优先级。如Thread.MIN_PRIORITY常数1Thread.NORM_PRIORITY常数5, Thread.MAX_PRIORITY常数10。其中每个线程的优先级都在Thread.MIN_PRIORITY常数1 到Thread.MAX_PRIORITY常数10 之间在默认情况下优先级都是Thread.NORM_PRIORITY常数5。学过操作系统这门课程的话我们可以发现多线程优先级或多或少借鉴了操作系统对进程的管理线程的终止interrupt()方法 注意interrupt()方法的使用效果并不像forbreak语句那样马上就停止循环。调用interrupt方法是在当前线程中打了一个停止标志并不是真的停止线程。public class MyThread extends Thread {public void run(){super.run();for(int i0; i500000; i){System.out.println(i(i1));}} }public class Run {public static void main(String args[]){Thread thread new MyThread();thread.start();try {Thread.sleep(2000);thread.interrupt();} catch (InterruptedException e) {e.printStackTrace();}} }输出结果... i499994 i499995 i499996 i499997 i499998 i499999 i500000判断线程是否停止状态 Thread.java类中提供了两种方法this.interrupted(): 测试当前线程是否已经中断 this.isInterrupted(): 测试线程是否已经中断 那么这两个方法有什么图区别呢 我们先来看看this.interrupted()方法的解释测试当前线程是否已经中断当前线程是指运行this.interrupted()方法的线程。public class MyThread extends Thread {public void run(){super.run();for(int i0; i500000; i){i;}} }public class Run {public static void main(String args[]){Thread thread new MyThread();thread.start();try {Thread.sleep(2000);thread.interrupt();System.out.println(stop 1- thread.interrupted());System.out.println(stop 2- thread.interrupted());} catch (InterruptedException e) {e.printStackTrace();}} }运行结果stop 1-false stop 2-false类Run.java中虽然是在thread对象上调用以下代码thread.interrupt(), 后面又使用System.out.println(stop 1- thread.interrupted()); System.out.println(stop 2- thread.interrupted());来判断thread对象所代表的线程是否停止但从控制台打印的结果来看线程并未停止这也证明了interrupted()方法的解释测试当前线程是否已经中断。这个当前线程是main它从未中断过所以打印的结果是两个false.如何使main线程产生中断效果呢public class Run2 {public static void main(String args[]){Thread.currentThread().interrupt();System.out.println(stop 1- Thread.interrupted());System.out.println(stop 2- Thread.interrupted());System.out.println(End);} }运行结果为stop 1-true stop 2-false End方法interrupted()的确判断出当前线程是否是停止状态。但为什么第2个布尔值是false呢 官方帮助文档中对interrupted方法的解释 测试当前线程是否已经中断。线程的中断状态由该方法清除。 换句话说如果连续两次调用该方法则第二次调用返回false。下面来看一下inInterrupted()方法。public class Run3 {public static void main(String args[]){Thread thread new MyThread();thread.start();thread.interrupt();System.out.println(stop 1- thread.isInterrupted());System.out.println(stop 2- thread.isInterrupted());} }运行结果stop 1-true stop 2-trueisInterrupted()并为清除状态所以打印了两个true。能停止的线程--异常法 有了前面学习过的知识点就可以在线程中用for语句来判断一下线程是否是停止状态如果是停止状态则后面的代码不再运行即可public class MyThread extends Thread {public void run(){super.run();for(int i0; i500000; i){if(this.interrupted()) {System.out.println(线程已经终止 for循环不再执行);break;}System.out.println(i(i1));}} }public class Run {public static void main(String args[]){Thread thread new MyThread();thread.start();try {Thread.sleep(2000);thread.interrupt();} catch (InterruptedException e) {e.printStackTrace();}} }运行结果... i202053 i202054 i202055 i202056 线程已经终止 for循环不再执行上面的示例虽然停止了线程但如果for语句下面还有语句还是会继续运行的。看下面的例子public class MyThread extends Thread {public void run(){super.run();for(int i0; i500000; i){if(this.interrupted()) {System.out.println(线程已经终止 for循环不再执行);break;}System.out.println(i(i1));}System.out.println(这是for循环外面的语句也会被执行);} }使用Run.java执行的结果是... i180136 i180137 i180138 i180139 线程已经终止 for循环不再执行 这是for循环外面的语句也会被执行如何解决语句继续运行的问题呢 看一下更新后的代码public class MyThread extends Thread {public void run(){super.run();try {for(int i0; i500000; i){if(this.interrupted()) {System.out.println(线程已经终止 for循环不再执行);throw new InterruptedException();}System.out.println(i(i1));}System.out.println(这是for循环外面的语句也会被执行);} catch (InterruptedException e) {System.out.println(进入MyThread.java类中的catch了。。。);e.printStackTrace();}} }使用Run.java运行的结果如下... i203798 i203799 i203800 线程已经终止 for循环不再执行 进入MyThread.java类中的catch了。。。 java.lang.InterruptedExceptionat thread.MyThread.run(MyThread.java:13)在沉睡中停止 如果线程在sleep()状态下停止线程会是什么效果呢public class MyThread extends Thread {public void run(){super.run();try {System.out.println(线程开始。。。);Thread.sleep(200000);System.out.println(线程结束。);} catch (InterruptedException e) {System.out.println(在沉睡中被停止, 进入catch 调用isInterrupted()方法的结果是 this.isInterrupted());e.printStackTrace();}} }使用Run.java运行的结果是线程开始。。。 在沉睡中被停止, 进入catch 调用isInterrupted()方法的结果是false java.lang.InterruptedException: sleep interruptedat java.lang.Thread.sleep(Native Method)at thread.MyThread.run(MyThread.java:12)从打印的结果来看 如果在sleep状态下停止某一线程会进入catch语句并且清除停止状态值使之变为false。前一个实验是先sleep然后再用interrupt()停止与之相反的操作在学习过程中也要注意public class MyThread extends Thread {public void run(){super.run();try {System.out.println(线程开始。。。);for(int i0; i10000; i){System.out.println(i i);}Thread.sleep(200000);System.out.println(线程结束。);} catch (InterruptedException e) {System.out.println(先停止再遇到sleep进入catch异常);e.printStackTrace();}} }public class Run {public static void main(String args[]){Thread thread new MyThread();thread.start();thread.interrupt();} }运行结果i9998 i9999 先停止再遇到sleep进入catch异常 java.lang.InterruptedException: sleep interruptedat java.lang.Thread.sleep(Native Method)at thread.MyThread.run(MyThread.java:15)能停止的线程---暴力停止 使用stop()方法停止线程则是非常暴力的。public class MyThread extends Thread {private int i 0;public void run(){super.run();try {while (true){System.out.println(i i);i;Thread.sleep(200);}} catch (InterruptedException e) {e.printStackTrace();}} }public class Run {public static void main(String args[]) throws InterruptedException {Thread thread new MyThread();thread.start();Thread.sleep(2000);thread.stop();} }运行结果i0 i1 i2 i3 i4 i5 i6 i7 i8 i9Process finished with exit code 0方法stop()与java.lang.ThreadDeath异常调用stop()方法时会抛出java.lang.ThreadDeath异常但是通常情况下此异常不需要显示地捕捉。public class MyThread extends Thread {private int i 0;public void run(){super.run();try {this.stop();} catch (ThreadDeath e) {System.out.println(进入异常catch);e.printStackTrace();}} }public class Run {public static void main(String args[]) throws InterruptedException {Thread thread new MyThread();thread.start();} }stop()方法以及作废因为如果强制让线程停止有可能使一些清理性的工作得不到完成。另外一个情况就是对锁定的对象进行了解锁导致数据得不到同步的处理出现数据不一致的问题。释放锁的不良后果使用stop()释放锁将会给数据造成不一致性的结果。如果出现这样的情况程序处理的数据就有可能遭到破坏最终导致程序执行的流程错误一定要特别注意public class SynchronizedObject {private String name a;private String password aa;public synchronized void printString(String name, String password){try {this.name name;Thread.sleep(100000);this.password password;} catch (InterruptedException e) {e.printStackTrace();}}public String getName() {return name;}public void setName(String name) {this.name name;}public String getPassword() {return password;}public void setPassword(String password) {this.password password;} }public class MyThread extends Thread {private SynchronizedObject synchronizedObject;public MyThread(SynchronizedObject synchronizedObject){this.synchronizedObject synchronizedObject;}public void run(){synchronizedObject.printString(b, bb);} }public class Run {public static void main(String args[]) throws InterruptedException {SynchronizedObject synchronizedObject new SynchronizedObject();Thread thread new MyThread(synchronizedObject);thread.start();Thread.sleep(500);thread.stop();System.out.println(synchronizedObject.getName() synchronizedObject.getPassword());} }输出结果b aa由于stop()方法以及在JDK中被标明为“过期/作废”的方法显然它在功能上具有缺陷所以不建议在程序张使用stop()方法。使用return停止线程 将方法interrupt()与return结合使用也能实现停止线程的效果public class MyThread extends Thread {public void run(){while (true){if(this.isInterrupted()){System.out.println(线程被停止了);return;}System.out.println(Time: System.currentTimeMillis());}} }public class Run {public static void main(String args[]) throws InterruptedException {Thread thread new MyThread();thread.start();Thread.sleep(2000);thread.interrupt();} }输出结果... Time: 1467072288503 Time: 1467072288503 Time: 1467072288503 线程被停止了笔者花了巨大篇幅介绍线程的终止因为这是在实际开发中最容易犯的错误千万注意哦~ 参考资料列表java并发编程指南 https://blog.csdn.net/qq_34337272/column/info/20860
http://www.huolong8.cn/news/111944/

相关文章:

  • 电脑网站 源码如何自己做网址
  • 网站建设qq做的网站必须放
  • 官方网站是什么中国公关公司排行榜
  • 南宁学网站开发东莞网站建设在哪里
  • 做自媒体那几个网站好点哈西建站优化
  • 网站建设预算及准备台州网站关键字优化详情
  • 怎么推广自己的公司网站wordpress主题 大学
  • 兰州网站外包百家号权重查询站长工具
  • seo建站要求湘潭网站建设 r磐石网络
  • 天津到天津天津网站开发ui培训班大概多少钱
  • 如何写网站建设方案书优化公司组织架构
  • 国外网站顶部菜单设计海原县住房和城乡建设局网站
  • 北京网站建设公司那个好怎么创建微信公众号写文章
  • 新网站多久收录广州公司注册名字查询
  • 宁波网站建设哪里有鞍山网站建设优化
  • 婚恋网站排名前三网站建设哪家技术好
  • 给新公司建网站开广告店一年利润多少
  • 网站是广西住房和城乡建设厅深圳网站商城定制设计
  • 专业建站推广网络公司金坛网站制作
  • 网站建设 维护购销合同网站建设合同 含维护费
  • 菠菜建设网站知道域名怎么进入网站
  • 重庆市建设工程信息官网站什么网站用php做的
  • 有哪些网站可以做设计挣钱最新永久免费在线观看电视剧网址
  • 厦门网站建设培训班网站推广套餐
  • 桂林北站防疫电话win10一键优化
  • 电商网站开发要多少钱做推广优化的网站有哪些内容
  • 有没有可以免费做试卷的网站_最好可以学会...地方性的网站有前途
  • 广州新公司网站建设西安火车站建设
  • 小清新 轻音乐网站 wordpress如何攻破wordpress
  • 湛江企业自助建站做个企业网站