既然 JAVA 中 yield() 和 sleep() 是静态函数,那么他们是如何获取线程对象中的信息的呢?

申祷无 2021-01-10 10:37:29
java.lang.Thread 中的 yield() 和 sleep() 。我的表达可能有问题,换句话说静态函数是如何找到要操作对象的?
...全文
6227 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
叫练 2021-01-12
  • 打赏
  • 举报
回复
/**
 * @author :jiaolian
 * @date :Created in 2021-01-12 10:35
 * @description:对象和线程关系
 * @modified By:
 * 公众号:叫练
 */
public class SleepTest {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public static void main(String[] args) throws InterruptedException {
        SleepTest sleepTest = new SleepTest();
        sleepTest.setName("我是叫练");
        //主线程做出一个睡眠的动作;
        Thread.sleep(1000);
        //主线程访问SleepTest实例
        System.out.println(Thread.currentThread().getName()+": "+sleepTest.getName());
    }
}
你可能没有理解线程和对象的关系,this对象和sleep的关系?线程是去操作对象的,线程在栈里面保存在对象引用,通过引用找到对象并操作,你说的静态函数sleep只是线程要做的一个动作,和调用普通方法没有任何区别,区别就是sleep是C++实现的,普通方法就是你自己用Java写的。如上案例,SleepTest sleepTest = new SleepTest();创建SleepTest 对象引用sleepTest,线程可以用 sleepTest操作里面的属性name,Thread中的sleep(1000)是是静态函数,在sleep里面可以获取当前操作线程,this表示当前对象,如果你想在sleep方法里面处理this对象,你可以把this当参数传入,但明显在sleep方法中再传入一个this就没有必要了,线程调用sleep后,main线程状态会从running变成time_waiting状态。如果对您有帮助,麻烦给个关注!
sunyiz 2021-01-12
  • 打赏
  • 举报
回复
线程还有个静态方法: Thread.currentThread(); 这就说明可以通过静态方法拿到当前执行的线程对象 所以,sleep之类的方法都可以静态调用,
叫练 2021-01-11
  • 打赏
  • 举报
回复
sleep()是睡眠当前线程,yield()是让出当前线程获取cpu资源,让其他线程获取,这些静态函数用在方法中只是去表达当前线程所要做的事情,看你描述的问题,“线程要操作对象”,对,每个线程都有自己私有区域,在JVM中叫方法栈,可以直接获取!希望答案对您有所帮助,问题提的非常好,有疑问可以私聊我
申祷无 2021-01-11
  • 打赏
  • 举报
回复
引用 1 楼 叫练 的回复:
sleep()是睡眠当前线程,yield()是让出当前线程获取cpu资源,让其他线程获取,这些静态函数用在方法中只是去表达当前线程所要做的事情,看你描述的问题,“线程要操作对象”,对,每个线程都有自己私有区域,在JVM中叫方法栈,可以直接获取!希望答案对您有所帮助,问题提的非常好,有疑问可以私聊我
能用代码说明一下吗?还是理解不了。静态函数不是没有 this 吗?没有 this 通过什么访问到线程的方法和函数呢?

另外为什么要私信聊?在论坛说不是更帮助更多潜在的人吗?

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧