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

建设小程序怎么挂失抚顺seo

建设小程序怎么挂失,抚顺seo,技术支持 沧州辉煌网络-网站建设,做后期哪个网站素材好多线程与高并发 线程的创建方式1.继承Thread类 重写run方法2.实现Runnable接口 重写run方法3. 实现Callable 重写call方法,配合FutureTask 线程的使用1.线程的状态1.1. 传统操作系统层面5种状态1.2.Java中给线程准备的6种状态 2.线程的常用方法2.1 获取当前线程2.2 …

多线程与高并发

  • 线程的创建方式
    • 1.继承Thread类 重写run方法
    • 2.实现Runnable接口 重写run方法
    • 3. 实现Callable 重写call方法,配合FutureTask
  • 线程的使用
    • 1.线程的状态
      • 1.1. 传统操作系统层面5种状态
      • 1.2.Java中给线程准备的6种状态
    • 2.线程的常用方法
      • 2.1 获取当前线程
      • 2.2 线程的名字
      • 2.3 线程的优先级
      • 2.4 线程的让步
      • 2.5 线程的休眠
      • 2.6 线程的强占
      • 2.7 守护线程

线程的创建方式

1.继承Thread类 重写run方法

public class MiTest {public static void main(String[] args) {MyJob t1 = new MyJob();t1.start();for (int i = 0; i < 100; i++) {System.out.println("main:" + i);}}}
class MyJob extends Thread{@Overridepublic void run() {for (int i = 0; i < 100; i++) {System.out.println("MyJob:" + i);}}
}

2.实现Runnable接口 重写run方法

public class MiTest {public static void main(String[] args) {MyRunnable myRunnable = new MyRunnable();Thread t1 = new Thread(myRunnable);t1.start();for (int i = 0; i < 1000; i++) {System.out.println("main:" + i);}}}class MyRunnable implements Runnable{@Overridepublic void run() {for (int i = 0; i < 1000; i++) {System.out.println("MyRunnable:" + i);}}
}

lambda方式

Thread t2 = new Thread(() -> {for (int i = 0; i < 100; i++) {System.out.println("lambda:" + i);}
});

3. 实现Callable 重写call方法,配合FutureTask

public class MiTest {public static void main(String[] args) throws ExecutionException, InterruptedException {//1. 创建MyCallableMyCallable myCallable = new MyCallable();//2. 创建FutureTask,传入CallableFutureTask futureTask = new FutureTask(myCallable);//3. 创建Thread线程Thread t1 = new Thread(futureTask);//4. 启动线程t1.start();//5. 做一些操作//6. 要结果Object count = futureTask.get();System.out.println("总和为:" + count);}
}class MyCallable implements Callable{@Overridepublic Object call() throws Exception {int count = 0;for (int i = 0; i < 100; i++) {count += i;}return count;}
}

线程的使用

1.线程的状态

1.1. 传统操作系统层面5种状态

在这里插入图片描述

1.2.Java中给线程准备的6种状态

在这里插入图片描述
NEW:Thread对象被创建出来了,但是还没有执行start方法。

RUNNABLE:Thread对象调用了start方法,就为RUNNABLE状态(CPU调度/没有调度)

BLOCKED、WAITING、TIME_WAITING:都可以理解为是阻塞、等待状态,因为处在这三种状态下,CPU不会调度当前线程

BLOCKED:synchronized没有拿到同步锁,被阻塞的情况

WAITING:调用wait方法就会处于WAITING状态,需要被手动唤醒

TIME_WAITING:调用sleep方法或者join方法,会被自动唤醒,无需手动唤醒

TERMINATED:run方法执行完毕,线程生命周期到头了

2.线程的常用方法

2.1 获取当前线程

public static void main(String[] args) throws ExecutionException, InterruptedException {// 获取当前线程的方法Thread main = Thread.currentThread();System.out.println(main);// "Thread[" + getName() + "," + getPriority() + "," +  group.getName() + "]";// Thread[main,5,main]
}

2.2 线程的名字

public static void main(String[] args) throws ExecutionException, InterruptedException {Thread t1 = new Thread(() -> {System.out.println(Thread.currentThread().getName());});t1.setName("模块-功能-计数器");t1.start();
}

2.3 线程的优先级

其实就是CPU调度线程的优先级、
java中给线程设置的优先级别有10个级别,从1~10任取一个整数。
如果超出这个范围,会排除参数异常的错误

public static void main(String[] args) throws ExecutionException, InterruptedException {Thread t1 = new Thread(() -> {for (int i = 0; i < 1000; i++) {System.out.println("t1:" + i);}});Thread t2 = new Thread(() -> {for (int i = 0; i < 1000; i++) {System.out.println("t2:" + i);}});t1.setPriority(1);t2.setPriority(10);t2.start();t1.start();
}

2.4 线程的让步

可以通过Thread的静态方法yield,让当前线程从运行状态转变为就绪状态。

public static void main(String[] args) throws ExecutionException, InterruptedException {Thread t1 = new Thread(() -> {for (int i = 0; i < 100; i++) {if(i == 50){Thread.yield();}System.out.println("t1:" + i);}});Thread t2 = new Thread(() -> {for (int i = 0; i < 100; i++) {System.out.println("t2:" + i);}});t2.start();t1.start();
}

2.5 线程的休眠

Thread的静态方法,让线程从运行状态转变为等待状态

sleep有两个方法重载:

  • 第一个就是native修饰的,让线程转为等待状态的效果
  • 第二个是可以传入毫秒和一个纳秒的方法(如果纳秒值大于等于0.5毫秒,就给休眠的毫秒值+1。如果传入的毫秒值是0,纳秒值不为0,就休眠1毫秒)

sleep会抛出一个InterruptedException

public static void main(String[] args) throws InterruptedException {System.out.println(System.currentTimeMillis());Thread.sleep(1000);System.out.println(System.currentTimeMillis());
}

2.6 线程的强占

Thread的非静态方法join方法

需要在某一个线程下去调用这个方法

如果在main线程中调用了t1.join(),那么main线程会进入到等待状态,需要等待t1线程全部执行完毕,在恢复到就绪状态等待CPU调度。

如果在main线程中调用了t1.join(2000),那么main线程会进入到等待状态,需要等待t1执行2s后,在恢复到就绪状态等待CPU调度。如果在等待期间,t1已经结束了,那么main线程自动变为就绪状态等待CPU调度。

public static void main(String[] args) throws InterruptedException {Thread t1 = new Thread(() -> {for (int i = 0; i < 10; i++) {System.out.println("t1:" + i);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}});t1.start();for (int i = 0; i < 10; i++) {System.out.println("main:" + i);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}if (i == 1){try {t1.join(2000);} catch (InterruptedException e) {e.printStackTrace();}}}
}

2.7 守护线程

默认情况下,线程都是非守护线程

JVM会在程序中没有非守护线程时,结束掉当前JVM

主线程默认是非守护线程,如果主线程执行结束,需要查看当前JVM内是否还有非守护线程,如果没有JVM直接停止

public static void main(String[] args) throws InterruptedException {Thread t1 = new Thread(() -> {for (int i = 0; i < 10; i++) {System.out.println("t1:" + i);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}});t1.setDaemon(true);t1.start();
}
http://www.dinnco.com/news/63293.html

相关文章:

  • 河北省建设机械协会网站是真的吗网络培训班
  • 怎么做自己网站的后台搜索引擎营销的特点是
  • 淘宝网站推广推广引流
  • 镜像网站能否做google排名网站推广的常用方法
  • 旅游网站开发目的和意义百度竞价推广的技巧
  • 做暧暖免费观看网站种子搜索神器
  • 做网站app怎么赚钱成都网站seo推广
  • 免费的行情网站下载安装百度怎么进入官方网站
  • 做直播网站用什么系统网站整站优化推广方案
  • 少主网络建站站内优化怎么做
  • 优秀ppt案例欣赏seo是什么意思网络用语
  • 网站如何做才能被360收录网站优化seo培训
  • 网站什么内容常用的网络营销平台有哪些
  • cpa推广app赚钱联盟平台网站外链的优化方法
  • 泉州网站建设价钱济南seo网络优化公司
  • 做羞羞的事情的网站竞价网络推广托管
  • 门户网站备案临沂seo推广
  • 深圳做网站得外包公司推广普通话的内容
  • 大学路网站建设写一篇软文多少钱
  • ppt的网站导航栏怎么做小区推广最有效的方式
  • b2c模式的网站有哪些搜索引擎优化百度
  • 网站的通栏怎么做百度收录刷排名
  • html5手机移动app网站制作教程长沙百度网站排名优化
  • 河南郑州网站建设哪家公司好专门开发小程序的公司
  • 什么做自己的网站,应招聘人才河南网站排名
  • 泰安房产网新楼盘快速排名软件seo系统
  • 装修设计费多少钱一平seo入门教程视频
  • 自己怎做网站北京专门做seo
  • wordpress url index.php茶叶seo网站推广与优化方案
  • 平面设计与网站开发的概述关键词挖掘爱网站