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

网站建设和优化的营销话术最佳的资源磁力搜索引擎

网站建设和优化的营销话术,最佳的资源磁力搜索引擎,中国建设银行招聘官网,系统集成项目管理多线程与高并发 线程的创建方式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.bjxfkj.com.cn/article/101516.html

相关文章:

  • 做网站 科目手机百度app下载安装
  • 网站开发网站sem 优化价格
  • b站推广入口2023年营销策划公司主要做些什么
  • 北京建设学院网站5g网络优化培训
  • 做网站写个人日志恶意点击软件哪个好
  • 移动端网站开发教程搜索引擎有哪些分类
  • 美做天然居家居网站seo免费培训视频
  • 做网站法律条文放心网站推广优化咨询
  • b站24小时免费直播下载网页制作软件下载
  • 怎么给网站做关键词域名注册管理机构
  • 如何用wordpress做一个企业网站和生活app下载安装最新版
  • 绵阳网络公司网站建设刷外链工具
  • 广州网站建设公搜索引擎优化论文
  • 做网站都需要什么资料谷歌广告怎么投放
  • 南通高端网站建设开发网站多少钱
  • 网站建设及维护服务技术指标营销手段有哪些方式
  • 阿里云服务器建立网站网站域名购买
  • 免费建网站平台哪个好免费发布信息平台有哪些
  • ajax数据库网页网站设计seo关键字怎么优化
  • 导购网站建设网站制作代码
  • 自己做网站花钱么百度seo官网
  • 常州公司做网站2023新闻摘抄十条
  • 谁做违法网站长沙有实力的关键词优化价格
  • lovefort表白网站制作创建网站的基本步骤
  • wordpress 钻石 插件北京seo顾问推推蛙
  • 怎么查网站空间百度seo和sem的区别
  • 买一个网站服务器多少钱淘宝关键词查询工具
  • 免费建立手机网站数字营销公司排行榜
  • 网站开发策略推广方案策略怎么写
  • 技术型网站做哪一种好网站空间费用一年多少