简介:线程开始运行。凭借其自己的堆栈空间,它将按照脚本像脚本一样逐步执行,直到终止为止。但是,如果每个线程隔离,则它们的值将很小;否则,如果多个线程可以与工作合作,则将在各个方面带来巨大的好处。
1.挥发性和同步关键字描述:(如果您不做太多,可以看到我的前期)
Java支持对对象或对象的多线程访问的成员变量。因为每个线程都有此变量的副本(对于执行速度更快),所以程序执行过程中读取的数据通常不是最新的。
关键字挥发性可用于修改字段(成员变量)。通常,通常有必要告知程序从共享内存中对变量的任何访问。变量上的线程的可见性。
关键字同步可用于修改方法或同步代码块。它主要确保多个线程同时是同时,只有一个线程在方法或同步代码块中。它保证了线程对可变访问访问的可见性和排他性。
通过使用Javap工具查看类文件信息的生产来分析同步关键字的实现的详细信息,以下代码使用同步块和同步方法。
代码示例:
执行Javap -v同步。同步中的阶级
专注于部分输出:
总结:
同步代码块和同步方法使用不同的方法锁定。它们实际上是在对象的监视器(监视器)上获得的。获取由同步保护的监视器。我们知道任何对象都有其自己的监视器锁定。当通过同步代码块的同步方法或该对象的同步方法调用此对象时,必须先获得执行方法的线程,以使线程对象的监视器锁定以输入同步块或同步方法,或者同步方法,在不获取监视器的线程(执行此方法)的情况下,将在同步代码块和同步方法的入口处被阻止,然后输入阻止状态。
对象,对象的监视器,同步队列和执行线程之间的关系
上面的摘要:
对对象的任何彻底访谈(受同步保护)必须首先获得对象监视器。如果获得故障,请输入同步队列,并将线程变为块。访问对象的前轮驱动器(锁的线程)时释放的释放操作唤醒了在同步队列中阻塞的螺纹,因此可以重新尝试获得监视器。
2.等待通知机制修改一个对象的值,另一个对象感知其更改,然后执行相应的操作。
最简单的方法:
上述代码存在问题:
Java构建 - 解决方案:
以上两个看似矛盾的问题可以通过Java的构建 - 等待/通知机制来解决。等待/通知机制在Java中任意可用,因为这些方法是在超级类对象中定义的。
notify()通知线程等待对象上的线程从wait()方法返回它,返回的前提是线程获得目标锁定notifyall()note notify notify notify notify notify notify notify notify notify notify notify notify notify note party party the partion the party three thread the party the party the party the partion the party three thread进入等待状态。仅当返回其他线程的通知或中断时。应该注意。调用Wait()方法将释放一段时间的等待(长)超时。如果没有通知时间,它将返回。
等待/通知机制指的是一个线程一个呼叫对象o的wait()方法输入等待状态。wait()方法返回,然后执行conter -up periverations.wait()和notify()/notifyall()/notifyall()在对象上,o就像一个开关信号,以完成等待方和通知方的相互作用(就像开头的生产者消费者模型一样)
示例代码:
查看输出:
请注意,在上面的两行中,可以再次交换两条保持锁定和标志的两行的两行。
总结:
计算上述过程:
上面的摘要:
Waitthread线程首先获得锁定,然后称对象的wait()方法释放锁的等待队列输入对象输入等待状态。由于waitthread释放了对象的锁,notifyThread然后获得了锁定将调用对象和对象的notify()方法,该方法将移动waitqueue的waitthread到同步。。
3.等待/通知的经典范式等待/通知被分为等待党和通知方。两者需要单独遵循以下规则。
等待以下规则:
通知方遵循以下规则:
4.管道输入/输出流管输入/输出流与一般文件输入/输出流量或网络输入/输出流之间的差异是管道输出/输出流主要用于螺纹之间的数据传输。
管道输入/输出流的特定实现:
1、2是字节流,3,4是字符流。
示例代码:
测试代码样本:
5. thread.join()thread.join()的语义含义:终止线程螺纹之后的当前线程a等待thread.join()。线程提供的JOIN()方法的API如下:
示例代码:
设置十个线程,从0-9开始,每个线程都需要调用上一个线程的JOIN()方法。例如示例Join()返回。
查看输出结果:
总结以上代码:
每个线程终止的前提是前驱动线程的终止。在每个线程等待末端 - 轮驱动线程之后,它将从join()返回。这涉及等待/通知机制。我们可以理解JDK的源代码:
6.使用螺纹网的使用不会详细说明螺纹锁定的核心原理。之后,将简要介绍螺纹锁定的使用。将来
ThreadLocal是一个线程变量,它是基于螺纹对象作为键和任意对象的存储结构。该存储结构可以连接到线程,我们可以检查通过螺纹插座对象上绑定该线程的值。
示例代码:
以下代码构建了计算方法的类计算。
查看执行结果: