美文网首页
有关线程的问题

有关线程的问题

作者: zgfei | 来源:发表于2017-09-27 10:59 被阅读5次

问题描述

在写一个demo时需要使用线程来模拟网络请求的方式,结果在下拉刷新的时候进度条显示但是不旋转。

使用线程的方式是:

//导致进度条显示但是不旋转
  new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }).run();

修改后为:

//正常
new Thread() {
        @Override
        public void run() {
            super.run();
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }.start();

于是产生疑问,两者之间的区别是什么?

解答

首先线程有两种方式实现,一种通过Thread,另一种是通过实现Runnable接口,两者在实现上和作用上均有区别。

Thread

实现方式:

//通过继承方式
public class MyThread extends Thread {
@Override
public void run() {
    super.run();
}
}
//调用
MyThread thread = new MyThread();
thread.start();

可以看出这种方式,只能单继承,因此有一定的局限性。

Runnable

//通过实现的方式
public class MyRunnable implements Runnable {
@Override
public void run() {
}
}
//调用
Thread thread1 = new Thread(new MyRunnable());
thread1.start();

可以看到实现Runnable也是通过Thread来调用的。
如果多个Thread也是同时调用的同一个Runnable对象,因此在Runnable里面实现的run方法中处理的数据可以共享到每个Thread中。因为使用的是实现的方式,因此避免了单继承的局限性。

问题分析

结果发现上面一个Thread调用的是run方法,进行执行,这是问题的关键。(开始看错,以为是Thread()和Thread(Runnable)的区别导致的)

run()和start()运行的区别

调用run方法,相当于直接运行run方法内的代码在同一个线程中运行,并不会开启新的线程运行。
因为我是在Main线程中调用的run方法,因此相当于让Main线程sleep一秒后运行,导致进度条没有旋转。

调用start方法,系统会开启一个新线程执行run方法里面的代码。因此不会阻塞Main线程。

相关文章

  • 有关线程的问题

    问题描述 在写一个demo时需要使用线程来模拟网络请求的方式,结果在下拉刷新的时候进度条显示但是不旋转。 使用线程...

  • Android下多线程的实现

    Android下多线程相关 线程安全相关问题参考:java内存模型与线程 android下与多线程有关的主要有以下...

  • 线程[思维导图]

    有关线程的问题:1.线程的状态2.线程控制pcb3.线程的创建和终止4.线程的同步机制5.线程的实现方式6.线程的...

  • Java之多线程

    今天考虑有关线程的代码问题,如何写多线程,什么的东西应该定义为线程?等等等。。 随笔记下来,防止后面忘记了。。什么...

  • 线程编程指南翻译第四篇(同步)

    同步 应用程序中存在多个线程会打开有关从多个执行线程安全访问资源的潜在问题。修改相同资源的两个线程可能会以非预期的...

  • iOS多线程开发-线程安全

    线程安全是什么意思?线程安全和锁机制有关, NSRunloop 提供的API是不安全的。 要解决资源抢夺问题在iO...

  • JSON--List集合转换成JSON对象

    最近公司遇到个奇怪的问题,就是一直出现网络异常的报错,怀疑跟线程有关,由于链接的socket线程众多,于是就有了本...

  • Java互联网架构-并发编程底层原理分析

    计算机中为什么会出现线程不安全的问题 volatile既然是与线程安全有关的问题,那我们先来了解一下计算机在处理数...

  • 2018-09-19 守护线程与非守护线程

    什么是守护线程、非守护线程? 什么是守护线程,和main有关。 用户线程(非守护线程): 守护线程,有一个特征,和...

  • 多线程pThread-NSThread-GCD-NSOperat

    1、主线程(UI线程) ——顾名思义就是:与UI有关,处理UI事件的线程。 1.1、主线程的主要作用: 显示\刷新...

网友评论

      本文标题:有关线程的问题

      本文链接:https://www.haomeiwen.com/subject/rbwyextx.html