收藏此站 联系我们 网站
当前位置:首页» 技术日志 » 【建站服务】西安网站建设_企业网站制作公司_高端网站设计开发-西安上往-域名申请

【建站服务】西安网站建设_企业网站制作公司_高端网站设计开发-西安上往-域名申请

作者: 风兰 . 阅读量: 4 . 发表时间:2022-09-21 05:27:46

网站建设

上往建站提供服务器空间服务商百度快照排名网站托管百度推广运营,致力于设计外包服务与源代码定制开发360推广搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。


西安网站建设_企业网站制作公司_高端网站设计开发-西安上往

网站建设.png

接调用 run?就是为了实现多线程的优点,没这个 start 不行。

  •  1.start() 方法来启动线程,真正实现了多线程运行。这时无需等待 run 方法体代码执行完毕,可以直接继续执行下面的代码;通过调用 Thread 类的 start() 方法来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。 然后通过此 Thread 类调用方法 run() 来完成其运行操作的, 这里方法 run() 称为线程体,它包含了要执行的这个线程的内容, run 方法运行结束, 此线程终止。然后 CPU 再调度其它线程。

  • 2.run() 方法当作普通方法的方式调用。程序还是要顺序执行,要等待 run 方法体执行完毕后,才可继续执行下面的代码; 程序中只有主线程——这一个线程, 其程序执行路径还是只有一条, 这样就没有达到写线程的目的。

记住:多线程就是分时利用 CPU,宏观上让所有线程一起执行 ,也叫并发。

public class Test {    public static void main(String[] args) {        Runner1 runner1 = new Runner1();        Runner2 runner2 = new Runner2();//        Thread(Runnable target) 分配新的 Thread 对象。        Thread thread1 = new Thread(runner1);        Thread thread2 = new Thread(runner2);//        thread1.start();//        thread2.start();        thread1.run();        thread2.run();    }}
 class Runner1 implements Runnable { // 实现了Runnable接口,jdk就知道这个类是一个线程    public void run() {        for (int i = 0; i < 100; i++) {            System.out.println("进入Runner1运行状态——————————" + i);        }    }}
 class Runner2 implements Runnable { // 实现了Runnable接口,jdk就知道这个类是一个线程    public void run() {        for (int i = 0; i < 100; i++) {            System.out.println("进入Runner2运行状态==========" + i);        }    }}


线程共包括以下 5 种状态:

1. 新建状态(New): 线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。


2. 就绪状态(Runnable): 也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。例如,thread.start()。处于就绪状态的线程,随时可能被CPU调度执行。


3. 运行状态(Running): 线程获取CPU权限进行执行。需要注意的是,线程只能从就绪状态进入到运行状态。


4. 阻塞状态(Blocked): 阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:


 (01) 等待阻塞 -- 通过调用线程的wait()方法,让线程等待某工作的完成。

 (02) 同步阻塞 -- 线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态。

 (03) 其他阻塞 -- 通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

5. 死亡状态(Dead): 线程执行完了或者因异常退出了run()方法,该线程结束生命周期。


HelloWorld

   HelloWorld


  zhy***@qq.com


   参考地址


4年前 (2018-09-04)

   cz


  109***3594@qq.com


27

线程安全问题


产生原因:多个线程竞争同一资源(访问同一数据),可参考经典的生产者消费者问题。


解决方案:


run 方法内:同步代码块 synchronized {}


Public synchronized 返回值类型 方法名(){} 自动释放对象锁

使用 Lock 锁


Lock 锁需要程序员(在 finally 代码块中)手动释放。


Lock lock=new ReentranttLock()    // Reentrant(可重用的)

Lock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作,是 JDK1.5 之后出现的。


Lock 接口中的方法:


void lock()   // 获取锁 

void unlock() // 释放锁 

Lock 接口的实现类:


java.util.concurrent.locks.ReentrantLock implements Lock

使用步骤:


 1.在成员位置创建一个 ReentrantLock 对象。

 2.在可能出现线程安全问题的代码前,调用 Lock 接口中的方法 lock 获取锁对象。

 3.在可能出现线程安全问题的代码后,调用 Lock 接口中的方法 unlock 释放锁对象。

public class RunnableImpl implements Runnable{

    //定义一个共享的票源

    private int ticket = 100;

    //1.在成员位置创建一个ReentrantLock对象

    Lock l = new ReentrantLock();

    //设置线程任务:卖票

    @Override

    public void run() {

        //使用死循环,让卖票重复的执行

        while(true){

            //2.在可能出现线程安全问题的代码前,调用Lock接口中的方法lock获取锁对象

            l.lock();

            //判断票是否大于0

            if(ticket>0){

                //为了提高线程安全问题出现的几率,让程序睡眠10毫秒

                try {


西安网站建设_企业网站制作公司_高端网站设计开发-西安上往


上往建站提供搭建网站域名注册官网备案服务网店详情页设计企业网店专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管网页美工排版,致力于域名申请竞价托管软文推广全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机网站推广百度竞价托管网站建设上网建站推广服务网络公司有哪些等业务,专业团队服务,效果好。

服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)


关键词:网站建设,企业网站,网站制作,网页设计,高端网站建设,企业网站制作,网页制作,制作网站,网站设计,高端网页设计,高端网站设计,做网站,自适应网站

全国服务热线
18114747181
二维码
手机端二维码
上往建站
地址:全国各地都有驻点商务 |  网站建设上往建站
在线咨询QQ:1120768800
 
QQ在线咨询
售前咨询热线
18114747181
营销顾问
营销顾问
售后服务热线
400-000-1116
售后服务
售后服务