java.lang.Object里的Native

java.lang.Object里的Native

今天在研究Object时看到了Native

本人是学软件的大二学生一枚,过够了普本的咸鱼大学生活。决定在沉迷打游戏无法自拔的时候悬崖勒马。
看过许多人在博客园上坚持自己,分享自己所学,,,很是敬佩!!!
在别人的博客上真的学到了许多,,,
我想唯有传扬他们的分享精神,才是对他们最大的感谢!!

回归正题java里的native
今天在看java.lang.Object时突然看见native,起初以为是一个类,后来意识到class里的方法registerNatives();后面跟了个“;”。在一个普通类里这显然不合理。那他又存在,那是为什么呢??

private static native void registerNatives();
    static {
        registerNatives();
    }

我了解到了native是一个修饰符!!

来了,灵魂三问!native是什么,干了什么,还可以干什么!

native即Java Native Interface (Java本地接口)

凡是一种语言,都希望是纯。比如解决某一个方案都喜欢就单单这个语言来写即可。Java平台有个用户和本地C代码进行互操作的API,
称为Java Native Interface (Java本地接口)。

我惊了!java还有这玩意,不行赶紧查查

发现Java中,用native关键字修饰的函数表明该方法的实现并不是在Java中完成的,而是由C/C++去完成的,并被编译成了.dll,由Java去调用。这是在哪调用呢???显然是jvm调用共享库里的东东…
也就是java和C/C++联合开发程序咯。

native干了啥呢

native是告诉了java虚拟机(jvm)我后面的这个名字是外部已经有C/C++实现啦!你准备好调用就行啦!

native还能怎么干呢

既然有native,我们自己可不可以写一个C或C++然后生成.dll,把.dll放入共享库后让java调用嘞!!!
答案当然可以!
这个可以去其他地看看,我就不说了

最后

本渣才疏学浅,如果有路过的大佬看到我有错误的地方希望得到指正。感谢!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这是Java中的wait函数,它会使当前线程等待,直到另一个线程通知前一个线程继续执行。这个函数是Object类的一个native方法,也就是它在底层是由Java虚拟机实现的,可以与底层操作系统的进程通信相关的函数。wait函数会一直等待,直到被notify或notifyAll方法唤醒,或者等待时间到期。在wait函数中,可以指定等待的时间,如果时间到期但还没有被唤醒,线程也会继续执行。 ### 回答2: java.lang.object.wait(native m)是Java中的一个方法,用于使当前线程等待并释放当前对象锁,直到以下情况发生之一: 1. 其他线程调用该对象的notify方法或notifyAll方法,唤醒该线程 2. 等待时间超过指定的时间n,自动唤醒该线程 该方法Object类的一个原生方法,因此无法直接查看其源代码。 在多线程编程中,wait和notify方法常常被用来实现线程间的协作。通过在一个对象上调用wait方法,线程将会进入对象的等待队列,直到该对象被其他线程唤醒。同样地,使用notify或notifyAll方法可以唤醒等待队列中的线程,使其继续执行。 需要注意的是,wait方法只是使线程等待并释放当前对象锁,并不会使线程进入睡眠状态。因此,在调用wait方法时,需要先获得该对象的锁,以确保只有一个线程能够进入等待状态。 另外,在使用wait和notify方法时,需要遵循以下几个规则: 1. wait方法必须在synchronized块中调用,否则将会抛出IllegalMonitorStateException异常。 2. 通常情况下,调用wait方法的线程应该检查条件是否满足,如果条件不满足,则继续等待。这可以通过while循环来实现,如下所示: synchronized (lock) { while (!condition) { lock.wait(); } } 3. 在调用notify或notifyAll方法后,必须释放锁,以便唤醒的线程能够获取锁并继续执行。因此,在使用wait和notify方法时,建议使用synchronized关键字来控制线程访问。 总之,java.lang.object.wait(native m)是Java中用于线程间协作的一个关键方法,它实现了线程的等待及唤醒功能。在使用该方法时,需要遵循一些规则,以确保线程能够正确的协作。 ### 回答3: java.lang.Object类是Java语言中的根基类,是所有类的超类。其中一个Object类中方法wait()是一个转换对象状态的方法操作:将线程置于“等待池”中,不再参与线程的竞争。当一个线程调用wait()方法时,当前线程会进入对应对象的等待池,同时释放持有的对象锁。等待池存放着调用同一个对象wait方法而被阻塞挂起的线程,直到被唤醒或中断为止。 而wait()方法的另一种形式则是wait(long timeout),其作用与wait()无异,但是当线程被阻塞等待达到一定的时间之后,会自动苏醒,重新进入就绪状态。 在Object类中的wait()方法中,synchronized是一个关键字,它将当前线程与对象锁做了绑定,只有获得对象锁的线程才可以调用实例对象中的wait()方法。如果当前线程没有获得锁,会抛出IllegalMonitorStateException异常。 wait()方法实现了线程之间的协调和同步,是实现线程通信的一种重要手段。当一个线程调用了该方法之后,就会释放掉所持有的锁,让其他线程持有锁来运行。同时该线程进入阻塞状态,直到其他线程调用notify()或notifyAll()来唤醒它。 总之,Object类wait()方法Java中的线程协调机制,它是实现线程间通信的一种重要手段。它可以让一个线程释放一个对象的同步锁并进入等待队列,直到其他线程对这个对象发出特定的通知(notify和notifyAll)。在此过程中,线程状态由RUNNABLE转变为WAITING/SLEEPING, 并暂停线程的执行,直到该线程被唤醒或者被中断。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值