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

做网站公司苏州搜索引擎排名优化seo

做网站公司苏州,搜索引擎排名优化seo,太原网站建设包括什么,微信小程序开通需要多少钱文章目录 1. 线程创建方式1.1 继承Thread1.2 声明一个实现Runnable接口的类1.3 利用Callable接口、FutureTask类来实现 2. 线程同步2.1 同步代码块2.2 同步方法2.3 Lock锁 3. 线程同步4. 线程池 1. 线程创建方式 1.1 继承Thread 定义子类,继承Thread,创…

文章目录

  • 1. 线程创建方式
    • 1.1 继承Thread
    • 1.2 声明一个实现Runnable接口的类
    • 1.3 利用Callable接口、FutureTask类来实现
  • 2. 线程同步
    • 2.1 同步代码块
    • 2.2 同步方法
    • 2.3 Lock锁
  • 3. 线程同步
  • 4. 线程池

1. 线程创建方式

1.1 继承Thread

定义子类,继承Thread,创建对象,并调用start启动线程

  • 优点:编码简单
  • 缺点:线程类已经继承Thread,无法继承其他类,不利于功能的扩展
public class Main {// main方法是有一条默认的主线程执行的public static void main(String[] args) {// 1. 创建线程类的对象,代表一个线程Thread t = new MyThread();// 2. 启动线程t.start();for (int i = 0; i < 10000; i++) {System.out.println("主线程输出:" + i);}}
}

注意,是调用Thread的start方法,而不是run方法!!!

public class MyThread extends Thread{@Overridepublic void run() {for (int i = 0; i < 10000; i++) {System.out.println("子线程输出:" + i);}super.run();}
}

1.2 声明一个实现Runnable接口的类

  • 优点:只是实现了一个接口,还可以继承一个类,实现其他接口,扩展性强
  • 缺点:需要多创建一个Runnable对象
class MyRunnable implements Runnable {@Overridepublic void run() {for (int i = 0; i < 10000; i++) {System.out.println("子线程输出:" + i);}}
}
static void test_Runnable() {
//        Runnable target = new MyRunnable(); // 任务对象(不是线程对象)
//        new Thread(target).start();// lambdanew Thread(() -> {for (int i = 0; i < 10000; i++) {System.out.println("子线程输出:" + i);}for (int i = 0; i < 10; i++) {System.out.println("主线程输出:" + i);}}

1.3 利用Callable接口、FutureTask类来实现

  • 优点:可以返回线程执行完后的结果
  • 缺点:编码复杂
    在这里插入图片描述
class MyCallable implements Callable<String> {int n;public MyCallable(int n) {this.n = n;}@Overridepublic String call() throws Exception {// 描述线程的任务,返回线程执行后的结果// 求1-n的和int sum = 0;for(int i = 1; i <= n; i++)sum += n;return "1~n的总和是:" + sum;}
}
static void test_Callble() {// 1. 创建Callable对象MyCallable call = new MyCallable(50);// 2. 把Callable对象封装成FutureTask对象// 1. 是一个任务对象,实现了Runnable对象// 2. 可以在线程执行完后,调用get方法获取FutureTask<String> f1 = new FutureTask<>(call);new Thread(f1).start();for (int i = 0; i < 10; i++) {System.out.println("主线程输出:" + i);}// 获取线程执行完毕后的结果String s = null;try {// 会等到线程执行完毕,这行代码再执行s = f1.get();} catch (Exception e) {e.printStackTrace();}System.out.println(s);}

我发现啊,Java的多线程和C++的多线程不一样的点是,Java中创建子线程,如果主线程先执行完了,子线程没有执行完,子线程会继续执行;但是C++会被终止。

不过join方法都有着相同的用处,那就是阻塞主线程,等待线程执行完毕后,再执行主线程后面的代码。

2. 线程同步

2.1 同步代码块

synchronized(同步锁) {访问共享资源的核心代码
}

这个同步锁是一个字符串也可以(双引号在内存中存在常量区,只有一份),只要是一个唯一对象即可 。
但最好是用共享资源作为锁,比如说this

如果要调用静态方法,同步锁采用类名.class,锁住整个class。

2.2 同步方法

把访问共享资源的核心方法上锁,保证线程安全。这样能保证一个对象中,只有一个方法在执行,其他方法都无法执行。

修饰符 synchronized 返回值类型 方法名(形参列表){操作共享资源得到代码
}

2.3 Lock锁

Lock是一个接口类,可以用实现类ReentrantLock来实例化一个锁,来使用。

Lock lk = new ReentrantLock();
lk.lock();
lk.unlock();

3. 线程同步

来了来了,条件遍历来了。注意,一定要和锁搭配使用。
在这里插入图片描述
来一个经典的例子吧,2个线程交替打印A和B

package TestDemo;// 2个线程交替打印A和B10次
public class Test2 {public static int count;static final Object lock = new Object(); // 锁public static void main(String[] args){Thread t1 = new Thread(() -> {for (int i = 0; i < 10; i++) {synchronized (lock) {System.out.println(Thread.currentThread().getName() + "打印A");lock.notify();try {if(i < 9)lock.wait();} catch (Exception e) {e.printStackTrace();}}}}, "A线程");Thread t2 = new Thread(() -> {for (int i = 0; i < 10; i++) {synchronized (lock) {System.out.println(Thread.currentThread().getName() + "打印B");lock.notify();try {if(i < 9)lock.wait();} catch (Exception e) {e.printStackTrace();}}}}, "B线程");t1.start();t2.start();}
}

4. 线程池

JDK5提供了代表线程池的接口:ExecutorService。比较常用的实现类是ThreadPoolExecutor

  • public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)
    • corePoolSize:指定线程池的核心线程数量
    • maximumPoolSize:指定线程池的最大线程数量
    • keepAliveTime:指定临时线程的存活时间
    • unit:指定临时线程存货的时间单位
    • workQueue:指定线程池的任务队列
    • threadFactory:指定线程池的任务工厂
    • handler:指定线程池的拒绝策略(任务队列满了后,新任务来了怎么处理)

在这里插入图片描述线程池默认是不会死亡的,除非调用shutdown(),或者shutdownNow()

  1. 临时线程什么时候创建?
    新任务提交时发现核心线程都在忙,任务队列也满了,并且还可以创建临时线程,此时才会创建临时线程,去执行新任务,而不是任务队列的任务(插队)。
  2. 什么时候会开始拒绝新任务?
    核心线程和临时线程都在忙,任务队列也满了,新的任务过来的时候才会开始拒绝任务。

Executors
是线程池的一个工具类,提供了很多静态方法用于返回不同特点的线程池对象。
在这里插入图片描述


文章转载自:
http://colombophile.rbzd.cn
http://tetramethylene.rbzd.cn
http://vieta.rbzd.cn
http://feminism.rbzd.cn
http://ufology.rbzd.cn
http://counterorder.rbzd.cn
http://jarful.rbzd.cn
http://slavery.rbzd.cn
http://sexualia.rbzd.cn
http://kleptomania.rbzd.cn
http://theocratic.rbzd.cn
http://greater.rbzd.cn
http://photorecce.rbzd.cn
http://posthaste.rbzd.cn
http://incessantly.rbzd.cn
http://hangzhou.rbzd.cn
http://keckling.rbzd.cn
http://gandhism.rbzd.cn
http://tailorship.rbzd.cn
http://soapwort.rbzd.cn
http://brasswind.rbzd.cn
http://participle.rbzd.cn
http://estaminet.rbzd.cn
http://sermonette.rbzd.cn
http://characterological.rbzd.cn
http://shnook.rbzd.cn
http://pseudoscience.rbzd.cn
http://calcify.rbzd.cn
http://putresce.rbzd.cn
http://interlining.rbzd.cn
http://senile.rbzd.cn
http://bagwash.rbzd.cn
http://glib.rbzd.cn
http://prelacy.rbzd.cn
http://metrological.rbzd.cn
http://macrospore.rbzd.cn
http://tetraspore.rbzd.cn
http://gadarene.rbzd.cn
http://metamorphic.rbzd.cn
http://radioamplifier.rbzd.cn
http://princeton.rbzd.cn
http://captious.rbzd.cn
http://tetradymite.rbzd.cn
http://restively.rbzd.cn
http://windbaggary.rbzd.cn
http://nonverbal.rbzd.cn
http://sahelian.rbzd.cn
http://typhomalarial.rbzd.cn
http://scullery.rbzd.cn
http://menstruum.rbzd.cn
http://sherwood.rbzd.cn
http://untillable.rbzd.cn
http://astroarchaeology.rbzd.cn
http://frostbelt.rbzd.cn
http://synaesthetic.rbzd.cn
http://hypochlorhydria.rbzd.cn
http://centralist.rbzd.cn
http://salpingography.rbzd.cn
http://trichloronitromethane.rbzd.cn
http://fructosan.rbzd.cn
http://zirconate.rbzd.cn
http://guiana.rbzd.cn
http://timesaving.rbzd.cn
http://shelde.rbzd.cn
http://subah.rbzd.cn
http://diestock.rbzd.cn
http://trimorphous.rbzd.cn
http://gironde.rbzd.cn
http://diapsid.rbzd.cn
http://seigneur.rbzd.cn
http://sikh.rbzd.cn
http://harper.rbzd.cn
http://urticaria.rbzd.cn
http://surveying.rbzd.cn
http://mutable.rbzd.cn
http://chromophobe.rbzd.cn
http://asterid.rbzd.cn
http://mideast.rbzd.cn
http://appreciation.rbzd.cn
http://rhinolaryngology.rbzd.cn
http://idiomatic.rbzd.cn
http://beaker.rbzd.cn
http://subtil.rbzd.cn
http://footfault.rbzd.cn
http://twangle.rbzd.cn
http://gibraltar.rbzd.cn
http://impacted.rbzd.cn
http://hessonite.rbzd.cn
http://annalistic.rbzd.cn
http://defeasible.rbzd.cn
http://petrology.rbzd.cn
http://utwa.rbzd.cn
http://calves.rbzd.cn
http://bathed.rbzd.cn
http://oarsmanship.rbzd.cn
http://dactylology.rbzd.cn
http://recessional.rbzd.cn
http://decameron.rbzd.cn
http://recalculation.rbzd.cn
http://amianthus.rbzd.cn
http://www.15wanjia.com/news/98843.html

相关文章:

  • 牛商网 做的p2p网站北大青鸟软件开发培训学费多少
  • 有哪些做兼职的设计网站有哪些工作图片搜索引擎
  • 织梦做信息分类网站成都网络营销搜索推广
  • 苏州建站公司认准苏州聚尚网络百度怎么做推广和宣传
  • 沈阳模板网站制作怎么在百度做网站推广
  • 网站如何设置默认首页网站访问量查询工具
  • 长沙网站建设工作室软文范例大全800字
  • 青海公司网站建设百度下载免费安装到桌面
  • 淄博高端网站建设乐达竞价网络推广
  • 程序网站开发日结app推广联盟
  • 郑州网站制作服务网络平台推广
  • 销售网络建设应该如何着手seo中文
  • 建设网站的工具是什么合肥seo搜索优化
  • 做网站兼容ieseo关键词排名如何
  • 中国电商平台有多少家seo搜索优化 指数
  • 怎么做网站模块找精准客户的app
  • 潍坊做网站的电话西安官网seo公司
  • 学校网站建设目的网址大全实用网址
  • 上海住房和城乡建设局网站首页百度关键词价格怎么查询
  • 做灯箱片的设计网站图片扫一扫在线识别照片
  • 武汉互联网公司招聘要求河北百度竞价优化
  • 网站设计流程是一个网站可以优化多少关键词
  • 清丰网站建设费用seo工资多少
  • 网站开发 兼职项目免费二级域名申请网站
  • 如皋做网站公司排名查询系统
  • 如何免费找精准客户长春关键词优化平台
  • 广州新公司网站建设seo博客网站
  • 设计网站用什么语言免费制作永久个人网站
  • 上海网站建设服务站霸网络app开发费用标准
  • 长春网站设计策划书汕头seo收费