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

网站建设经费方案湖南网站优化

网站建设经费方案,湖南网站优化,免费项目管理软件app,濮阳建网站一、什么是多线程 1.1、什么是进程 进程我们可以理解为程序的基本执行实体,我们打开任务管理器,每个软件的运行就是1个进程。 1.2、多线程 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。 例如我们打开360软件,360软件本身就是1个进…

一、什么是多线程

1.1、什么是进程

进程我们可以理解为程序的基本执行实体,我们打开任务管理器,每个软件的运行就是1个进程

1.2、多线程

         线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位

        例如我们打开360软件,360软件本身就是1个进程,360里面的木马查杀电脑清理系统修复优化加速等功能就是多个线程

 总结:

多线程就是应用软件中相互独立,可以同时运行的功能

二、创建线程的三种方式

2.1、继承thread类重写run方法 

​
package cn.itcast.thread;public class MyThread extends Thread{@Overridepublic void run() {for (int i = 0; i <100 ; i++) {String name = getName();System.out.println("我是:" + name);}}
}​

然后在main方法中执行,如果在test方法中执行,可能出现线程执行时间过短,无法展示完整的结果

package cn.itcast.thread;import org.junit.Test;import java.util.Calendar;
import java.util.Date;public class Test1 {//@Test//public void test1() {//    MyThread myThread1=new MyThread();//    myThread1.setName("线程1");//    myThread1.start();//    MyThread myThread2=new MyThread();//    myThread2.setName("线程2");//    myThread2.start();////}public static void main(String[] args) {MyThread myThread1=new MyThread();myThread1.setName("线程1");myThread1.start();MyThread myThread2=new MyThread();myThread2.setName("线程2");myThread2.start();}}

2.2、实现Runnable接口,重写run方法

package cn.itcast.thread.run;public class MyRun implements Runnable{@Overridepublic void run() {for (int i = 0; i < 100; i++) {Thread thread = Thread.currentThread();System.out.println("我是:"+thread.getName());}}
}

然后在main方法中执行

package cn.itcast.thread.run;import cn.itcast.thread.MyThread;
import org.junit.Test;public class Test1 {//@Test//public void test1() {//    //要执行的线程任务//    MyRun myRun=new MyRun();//    //创建线程对象//    Thread t1=new Thread(myRun);//    t1.setName("线程1");//    Thread t2=new Thread(myRun);//    t2.setName("线程2");//    //开启线程//    t1.start();//    t2.start();////}public static void main(String[] args) {//要执行的线程任务MyRun myRun=new MyRun();//创建线程对象Thread t1=new Thread(myRun);t1.setName("线程1");Thread t2=new Thread(myRun);t2.setName("线程2");//开启线程t1.start();t2.start();}}

2.3、实现Callable接口重写call方法

package cn.itcast.thread.call;import java.util.concurrent.Callable;public class MyCall implements Callable<Integer> {@Overridepublic Integer call() throws Exception {Integer sum=0;for (int i = 0; i <=100; i++) {sum=sum+i;}return sum;}
}

然后在main方法中执行

package cn.itcast.thread.call;import cn.itcast.thread.run.MyRun;
import org.junit.Test;import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;public class Test1 {//@Test//public void test1() throws ExecutionException, InterruptedException {//    //要执行的线程任务//    MyCall myCall=new MyCall();//    //FutureTask对象用来管理多线程运行的结果//    FutureTask<Integer>futureTask=new FutureTask<>(myCall);//    //创建线程对象//    Thread t1=new Thread(futureTask);//    //开启线程//    t1.start();//    //拿到多线程的运行结果//    Integer result = futureTask.get();//    System.out.println(result);////}public static void main(String[] args) throws ExecutionException, InterruptedException {//要执行的线程任务MyCall myCall=new MyCall();//FutureTask对象用来管理多线程运行的结果FutureTask<Integer>futureTask=new FutureTask<>(myCall);//创建线程对象Thread t1=new Thread(futureTask);//开启线程t1.start();//拿到多线程的运行结果Integer result = futureTask.get();System.out.println(result);}}

三种方法具体的差别,以及thread类的常用API看之前写的文章

并发和并行的概念也看之前的文章

JAVA基础进阶(十一)-CSDN博客

三、守护线程

 守护线程指的是非守护线程全部结束后,守护线程一定结束

创建线程1

package cn.itcast.thread.protect;public class MyThread1 extends Thread{@Overridepublic void run() {for (int i = 0; i <10 ; i++) {String name = getName();System.out.println(name + "@"+i);}}
}

创建线程2

package cn.itcast.thread.protect;public class MyThread2 extends Thread{@Overridepublic void run() {for (int i = 0; i <100 ; i++) {String name = getName();System.out.println(name + "@"+i);}}
}

在main方法中将MyThread2线程设置为守护线程:myThread2.setDaemon(true);

package cn.itcast.thread.protect;import cn.itcast.thread.MyThread;
import org.junit.Test;public class Test1 {//@Test//public void test1() {//    MyThread1 myThread1=new MyThread1();//    myThread1.setName("女神");//    MyThread2 myThread2=new MyThread2();//    myThread2.setName("备胎");//    myThread2.setDaemon(true);//    myThread1.start();//    myThread2.start();//}public static void main(String[] args) {MyThread1 myThread1=new MyThread1();myThread1.setName("女神");MyThread2 myThread2=new MyThread2();myThread2.setName("备胎");myThread2.setDaemon(true);myThread1.start();myThread2.start();}}

得到最终结果:

 当非守护线程myThread1结束后,守护线程myThread2执行一段时间后会立马结束,不会执行完,myThread2执行完最后应该是99,只执行到了11

应用场景:打开qq聊天,同时传输文件,qq聊天就相当于非守护线程,传输文件就相当于守护线程,当关闭聊天框,传输文件也会随之关闭

四、线程的生命周期

4.1、创建线程

1、使用start()方法创建线程后,线程就处于就绪状态,此时线程有执行资格,但是没有执行权,因为需要和其他的线程不停抢占CPU的执行权

2、当抢到CPU的执行权后,此时线程既有执行资格又有执行权,就能执行线程中的代码,此时线程处于运行状态

3、如果此时CPU的执行权被其他线程抢走,线程就又会回到就绪状态,又或者线程被sleep()方法或者其他方法阻塞,就既没有执行资格也没有执行权,处于阻塞状态,如果以上两种情况都没有出现,那么线程就能执行完毕,线程就会死亡变成垃圾。

 

五、线程安全问题

http://www.dtcms.com/wzjs/191919.html

相关文章:

  • 荣成做网站的公司加快实施创新驱动发展战略
  • 定制网站建设服务公司黄页推广引流网站
  • 做网站包含的技术谷歌seo和百度seo区别
  • 空中花园做网站的公司手机优化大师哪个好
  • 建网站系统平台安卓手机优化神器
  • 长沙浏阳市疫情最新数据消息香港seo公司
  • 石狮建设局网站网络策划营销
  • wordpress站添加根部单页打不开广告设计公司
  • 免费做网页的网站线下引流的八种推广方式
  • 两个wordpress互通seo网站推广批发
  • 做便宜网站网页设计制作网站教程
  • 网站建设费用申请首页关键词排名代发
  • 企业网站开发上海韵茵seo关键词优化排名
  • 怎么做信息发布型网站软件开发公司排行榜
  • ps彩屏做的好的网站网站推广的方式和方法
  • 网站建设都有什么功能重庆seo服务
  • 能够做一镜到底的网站石家庄百度快速排名优化
  • 高端网站建设磐石网络好营销策划书案例
  • nodejs 网站开发模块网络优化是做什么的
  • 有哪些可以做翻译的网站免费网站安全检测
  • mac 做网站开发软文街官网
  • 甘肃省省建设厅网站沧州网站seo公司
  • 电子商务公司网站怎么建网络运营怎么学
  • 百度网站降权永久开源的免费建站系统
  • 给别人做软件的网站优化设计三年级上册答案语文
  • seo推广顾问大丰seo排名
  • 对招聘公司做评价的网站搜狗收录
  • 北京活动网站制作深圳seo优化排名公司
  • 做购物网站的开题报告流量精灵官网
  • seo整站优化方法关键词你们懂的