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

做免费网站推广开头语百度广告投放

做免费网站推广开头语,百度广告投放,基于h5的移动网站开发,做教育培训的网站目录 一、多线程的实现 (1)什么是多线程 (2)并发和并行 (3)进程和线程 (4)多线程的实现方式一:继承Thread类 (5) 多线程的实现方式…

目录

一、多线程的实现

(1)什么是多线程

(2)并发和并行

(3)进程和线程         

(4)多线程的实现方式一:继承Thread类

(5) 多线程的实现方式二:实现Runnable接口

(6) 多线程的实现方式三:实现Callable接口

(7)三种实现方式对比 

(8)设置和获取线程名称

 (9)线程休眠

(10)线程优先级

(11)守护线程


一、多线程的实现

(1)什么是多线程

是指从软件或者硬件上实现多个线程并发执行的技术。

(2)并发和并行

并行:在同一时刻,有多个指令在多个CPU上同时执行

并发:在同一时刻,有多个指令在单个CPU上交替执行。

(3)进程和线程         

1、进程:正在运行的程序

独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位

动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的

并发性:任何进程都可以同其他进程一起并发执行  

2、线程:进程中单个顺序控制流,是一条执行路径

单线程:一个进程如果只有一条执行路径,则称为单线程程序

多线程:一个进程如果有多条执行路径,则称为多线程程序

(4)多线程的实现方式一:继承Thread类

1、方法介绍 

方法名说明
void run()在线程开启后,此方法将被调用执行
void start()使此线程开始执行,Java虚拟机会调用run方法()

2、实现步骤

定义一个类MyThread继承Thread

Mythread中重写run()方法

创建MyThread对象

启动线程

3、示例代码

public class MyThread extends Thread {@Overridepublic void run() {for(int i=0; i<100; i++) {System.out.println(i);}}
}
public class MyThreadDemo {public static void main(String[] args) {MyThread my1 = new MyThread();MyThread my2 = new MyThread();my1.start();my2.start();}
}

4、细节

(1)为什么要重写run方法

因为run()是用来封装被线程执行的代码  

(2)run()方法和start()方法的区别?

run():封装线程执行的代码,直接调用,相当于普通方法的调用

start():启动线程;然后由JVM调用此线程的run()方法

(5) 多线程的实现方式二:实现Runnable接口

1、方法介绍

方法名说明
Thread(Runnable target)分配一个新的Thread对象
Thread(Runnable target, String name)分配一个新的Thread对象

2、实现步骤

定义一个类MyRunnable实现Runnable接口

在MyRunnable类中重写run()方法

创建MyRunnable类的对象

创建Thread类的对象,把MyRunnable对象作为构造方法的参数

启动线程

3、示例代码

public class MyRunnable implements Runnable {@Overridepublic void run() {for(int i=0; i<100; i++) {System.out.println(Thread.currentThread().getName()+"-"+i);}}
}public class MyRunnableDemo {public static void main(String[] args) {//创建MyRunnable类的对象MyRunnable my = new MyRunnable();//创建Thread类的对象,把MyRunnable对象作为构造方法的参数
//        Thread t1 = new Thread(my);
//        Thread t2 = new Thread(my);Thread t1 = new Thread(my,"白兔");//定义线程名Thread t2 = new Thread(my,"袋鼠");//启动线程t1.start();t2.start();}
}

(6) 多线程的实现方式三:实现Callable接口

1、方法介绍

方法名说明
V call()计算结果,如果无法计算结果,则抛出一个异常
FutureTask(Callable<V> callable)创建一个 FutureTask,一旦运行就执行给定的 Callable
V get()如有必要,等待计算完成,然后获取其结果

2、实现步骤

定义一个类MyCallable实现Callable接口

在MyCallable类中重写call()方法

创建MyCallable类的对象

创建Future的实现类FutureTask对象,把MyCallable对象作为构造方法的参数

创建Thread类的对象,把FutureTask对象作为构造方法的参数

启动线程

再调用get方法,就可以获取线程结束之后的结果。

3、代码演示

public class MyCallable implements Callable<String> {@Overridepublic String call() throws Exception {for (int i = 0; i < 100; i++) {System.out.println("测试" + i);}//返回值就表示线程运行完毕之后的结果return "成功";}
}
public class Demo {public static void main(String[] args) throws ExecutionException, InterruptedException {//线程开启之后需要执行里面的call方法MyCallable mc = new MyCallable();//可以获取线程执行完毕之后的结果.也可以作为参数传递给Thread对象FutureTask<String> ft = new FutureTask<>(mc);//创建线程对象Thread t1 = new Thread(ft);//开启线程t1.start();String s = ft.get();System.out.println(s);}
}

(7)三种实现方式对比 

1、实现Runnable、Callable接口

好处: 扩展性强,实现该接口的同时还可以继承其他的类

缺点: 编程相对复杂,不能直接使用Thread类中的方法

2、继承Thread类

好处: 编程比较简单,可以直接使用Thread类中的方法

缺点: 可以扩展性较差,不能再继承其他的类

(8)设置和获取线程名称

1、方法介绍

方法名说明
void setName(String name)将此线程的名称更改为等于参数name
String getName()返回此线程的名称
Thread currentThread()返回对当前正在执行的线程对象的引用

2、示例代码

public class MyThread extends Thread {public MyThread() {}public MyThread(String name) {super(name);}@Overridepublic void run() {for (int i = 0; i < 100; i++) {System.out.println(getName()+"-"+i);}}
}
public class MyThreadDemo {public static void main(String[] args) {MyThread my1 = new MyThread();MyThread my2 = new MyThread();my1.setName("高铁");my2.setName("飞机");MyThread my1 = new MyThread("高铁");MyThread my2 = new MyThread("飞机");my1.start();my2.start();//static Thread currentThread() 返回对当前正在执行的线程对象的引用System.out.println(Thread.currentThread().getName());}
}

 (9)线程休眠

public class MyRunnable implements Runnable {@Overridepublic void run() {for (int i = 0; i < 100; i++) {try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() + "---" + i);}}
}
public class Demo {public static void main(String[] args) throws InterruptedException {MyRunnable mr = new MyRunnable();Thread t1 = new Thread(mr);Thread t2 = new Thread(mr);t1.start();t2.start();}
}

(10)线程优先级

1、线程调度

​​​​​​​两种调度方式

  • 分时调度模型:所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间片

  • 抢占式调度模型:优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个,优先级高的线程获取的 CPU 时间片相对多一些 

java使用的是抢占式调度模型

随机性:假如计算机只有一个 CPU,那么 CPU 在某一个时刻只能执行一条指令,线程只有得到CPU时间片,也就是使用权,才可以执行指令。所以说多线程程序的执行是有随机性,因为谁抢到CPU的使用权是不一定的

2、方法介绍

方法名说明
final int getPriority()返回此线程的优先级
final void setPriority(int newPriority)更改此线程的优先级线程默认优先级是5;线程优先级的范围是:1-10

3、代码演示 

public class MyCallable implements Callable<String> {@Overridepublic String call() throws Exception {for (int i = 0; i < 100; i++) {System.out.println(Thread.currentThread().getName() + "-" + i);}return "线程执行完毕";}
}
public class Demo {public static void main(String[] args) {//优先级: 1 - 10 默认值:5MyCallable mc = new MyCallable();FutureTask<String> ft = new FutureTask<>(mc);Thread t1 = new Thread(ft);t1.setName("飞机");t1.setPriority(10);t1.start();MyCallable mc2 = new MyCallable();FutureTask<String> ft2 = new FutureTask<>(mc2);Thread t2 = new Thread(ft2);t2.setName("坦克");t2.setPriority(1);t2.start();}
}

(11)守护线程

1、方法介绍

方法名说明
void setDaemon(boolean on)将此线程标记为守护线程,当运行的线程都是守护线程时,Java虚拟机将退出

2、示例代码

public class MyThread1 extends Thread {@Overridepublic void run() {for (int i = 0; i < 10; i++) {System.out.println(getName() + "---" + i);}}
}
public class MyThread2 extends Thread {@Overridepublic void run() {for (int i = 0; i < 100; i++) {System.out.println(getName() + "-" + i);}}
}
public class Demo {public static void main(String[] args) {MyThread1 t1 = new MyThread1();MyThread2 t2 = new MyThread2();//把第二个线程设置为守护线程//当普通线程执行完之后,那么守护线程也没有继续运行下去的必要了.t2.setDaemon(true);t1.start();t2.start();}
}

http://www.mfbz.cn/news/168/

相关文章:

  • wordpress免安阳seo
  • 深圳网站制作公司可以给香港网站做维护和开发吗seo营销推广平台
  • 常州市网站建设公司自己创建一个网站需要多少钱
  • 代做标书网站专业seo公司
  • 收企业做网站备案my63777免费域名查询2023年
  • 软件开发工程师和java开发工程师海外网站seo优化
  • 购物网站的搜索功能是怎么做的大泽山seo快速排名
  • 常德市 网站建设seo快速排名站外流量推广
  • 青岛做网站推广公司哪家好营销网站建设门户
  • wordpress系统介绍网站推广优化技巧
  • 做网站荣耀体验服官网百家号权重查询
  • 有哪些做问卷调查挣钱的网站优化设计三年级上册答案
  • s.w.g wordpress长沙seo咨询
  • 网站建设策略数字经济发展情况报告
  • b2b平台软件长春网站seo
  • 北京市住房和城乡建设委员会官方网站烟台网络推广
  • 苍溪规划和建设局网站云搜索神器
  • 无棣网页设计引擎优化搜索
  • 做网站哪个语言快武汉seo排名优化
  • 我想在阿里巴巴做卫生纸的网站郑州专业的网站公司
  • dedecms做电影网站商丘优化公司
  • 重庆技术支持 网站建设公司最近热点新闻事件
  • 网站开发有限公司网站seo入门基础教程书籍
  • wordpress 大型网站搜狗网站收录
  • 织梦本地安装网站千锋教育
  • 3d建模师容易找工作吗windows7系统优化工具
  • 做二手平台公益的网站互联网销售可以卖什么产品
  • 电商网站推广常见问题自己怎么做网站网页
  • 网站搜索框怎么做b站24小时自助下单平台网站
  • 网站怎么做架构深圳搜索引擎优化seo