「java时间片是什么」java线程时间片
本篇文章给大家谈谈java时间片是什么,以及java线程时间片对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、程序设计中的时间片是什么意思,java中如何实现
- 2、java中多线程,时间片是什么意思?如果分给线程的时间片不够运行完一个线程怎么办?这个线程接下来怎么办
- 3、java 时间片的设定是多少时间
- 4、什么是时间片
程序设计中的时间片是什么意思,java中如何实现
cpu吧所有的时间分成相等的很小的时间片,每个进程一次只能得到一个时间片去执行,如果在这个时间片以内时间内完成任务那最好,如果还没完成,则要先暂停然别的程序执行,然后过了一会儿又轮到刚才的程序执行,但是这种轮转还是很快的,我们一般感觉不到
至于java如何实现,不知道,就像楼上说的,应该是由CPU根据时间片轮转算法确定的
java中多线程,时间片是什么意思?如果分给线程的时间片不够运行完一个线程怎么办?这个线程接下来怎么办
这个时间片是操作系统自己分配的,程序员只需要决定是否启动线程和终止线程就可以了。时间片是并行操作系统中的一个概念,意思是将时间分成多个小片段根据线程优先级采用某些策略以此给不同的线程分配时间片段,从用户的角度来看线程好像是在同时运行一样。现在采用多核系统可以真正的同时运行多个线程了,这里面的分配机制就更加复杂了。写java代码操作不到这么底层的东西。
java 时间片的设定是多少时间
挺底层的啊
1 取决于操作系统,也是取决于操作系统
2 不知道。只知道notify() 和 notifyAll()
我是自己理解的,比如java线程要"基于优先权"调度,给线程设置了优先权,但操作系统只支持"先来先服务"调度,java也不能改变系统的底层调度吧.
下面是java线程调度的具体说明,前面是中文翻译(不保证准确),后面是英文原著,希望对你有用:
在java技术中,线程通常是抢占式的而不需要时间片分配进程(分配给每个线程相等的cpu时间的进程)。一个经常犯的错误是认为“抢占”就是“分配时间片”。
在Solaris平台上的运行环境中,相同优先级的线程不能相互抢占对方的cpu时间。但是,在使用时间片的windows平台运行环境中,可以抢占相同甚至更高优先级的线程的cpu时间。抢占并不是绝对的,可是大多数的JVM的实现结果在行为上表现出了严格的抢占。纵观JVM的实现,并没有绝对的抢占或是时间片,而是依赖于编码者对wait和sleep这两个方法的使用。
抢占式调度模型就是许多线程属于可以运行状态(等待状态),但实际上只有一个线程在运行。该线程一直运行到它终止进入可运行状态(等待状态)或是另一个具有更高优先级的线程变成可运行状态。在后一种情况下,底优先级的线程被高优先级的线程抢占,高优先级的线程获得运行的机会。
线程可以因为各种各样的原因终止并进入可运行状态(因为堵塞)。例如,线程的代码可以在适当时候执行Thread.sleep()方法,故意让线程中止;线程可能为了访问资源而不得不等待直到该资源可用为止。
所有可运行的线程根据优先级保持在不同的池中。一旦被堵塞的线程进入可运行状态,它将会被放回适当的可运行池中。非空最高优先级的池中的线程将获得cpu时间。
最后一个句子是不精确的,因为:
(1)在大多数的JVM实现中,虽然不能保证说优先级有任何意义,但优先级看起来象是用抢占方式工作。
(2)微软windows的评价影响线程的行为,以至尽管一个处于可运行状态的优先级为5的java线程正在等待cpu时间,但是一个优先级为4的java线程却可能正在运行。
实际上,许多JVM用队列来实现池,但没有保证行为。
Thread Scheduling
In Java technology,threads are usually preemptive,but not necessarily Time-sliced(the
process of giving each thread an equal amount of
CPU time).It is common mistake to believe that
"preemptive" is a fancy word for "does time-slicing".
For the runtime on a Solaris Operating Environment platform,Java technology does not preempt threads of the same priority.However,the runtime on Microsoft Windows platforms uses time-slicing,so it preempts threads of the same priority and even threads of higher priority.Preemption is not
guaranteed;however,most JVM implementations result in behavior that appears to be strictly preemptive.Across JVM implementations,there is
no absolute guarantee of preemption or
time-slicing.The only guarantees lie in the
coder’s use of wait and sleep. The model of a preemptive scheduler is that many threads might be runnable,but only one thread is actually running.This thread continues to run until it ceases to be runnable or another thread of higher priority becomes runnable.In the latter case,the lower priority thread is preempted by the thread of higher priority,which gets a chance to run instead.
A thread might cease to runnable (that is,because blocked) for a variety of reasons.The thread’s code can execute a Thread.sleep() call,deliberately asking the thread to pause for a fixed period of time.The thread might have to wait to access a resource and cannot continue until that resource become available.
All thread that are runnable are kept in pools
according to priority.When a blocked thread
becomes runnable,it is placed back into the
appropriate runnable pool.Threads from the
highest priority nonempty pool are given CPU time.
The last sentence is worded loosed because:
(1) In most JVM implementations,priorities seem
to work in a preemptive manner,although there is
no guarantee that priorities have any meaning at all;
(2) Microsoft Window’s values affect thread
behavior so that it is possible that a Java
Priority 4 thread might be running,in spite of
the fact that a runnable Java Priority 5 thread
is waiting for the CPU. In reality,many JVMs implement pool as queues,but this is not guaranteed hehavior.
什么是时间片
补充:
你说的10个时间片是不是指执行十次?
我把程序修改了。
但是如果这样做:就看不出来线程实际上是按照时间片执行了
因为在一个时间片内下面的线程之一就执行完了
看不出效果!
你所需要的FOR CASE 也可以加上,但是一个说明线程的小例子
实在没必要
public class HelloWorld extends Thread
{
int k=0;
public HelloWorld(String name,int k)
{
super(name);
this.k=k;
}
public void run()
{
int i=k;//获得某线程的初始值
System.out.println();
System.out.print(getName()+": ");
while(i10)//程序执行10次
{
System.out.print("Hello_World_No."+i+" ");
i+=2;
}
System.out.println(getName()+" end!");
}
public static void main(String args[])
{
System.out.println("Hello World创建两个线程:");
HelloWorld h1=new HelloWorld("Hello1",1);//从1开始执行
HelloWorld h2=new HelloWorld("Hello2",2);
h1.start();
h2.start();
}
}
/*/////如果非要要For与case语句不可,下面可以参考
for(int j=0;j10;j++)
{
int m=0;
m=j%2;
switch(m)
{
case 0:h2.interrupt();h1.start();
case 1:h1.interrupt();h2.start();
}
}
*/
运行结果是:
Hello World创建两个线程:
Hello1: Hello_World_No.1 Hello_World_No.3 Hello_World_No.5 Hello_World_No.7 Hell
o_World_No.9 Hello1 end!
Hello2: Hello_World_No.2 Hello_World_No.4 Hello_World_No.6 Hello_World_No.8 Hell
o2 end!
如还有什么不满意,就Q我:331254620
我的看法:
在宏观上:我们可以同时打开多个应用程序,每个程序并行不悖,同时运行。但是在微观上:由于只有一个CPU,一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序轮流执行。
举个例子:
你同时输入两篇文档:A.txt和B.txt;
你在A中输入一个字之后,再在B中输入一个字,轮流输入,直至完成。总的看来你似乎在同时进行两篇文章的录入,你可以说我一边写A一边写B。但是具体到某个字时,就是沿着时间的前进,AB交替进行了。而你每个字输入所占用的这段时间,我们就可以称之为时间片。
举个多线程程序的例子,说明时间片是怎样工作的(java)
如上:
由此可见:两个线程是交替执行的(数字的变化),从宏观上(同时输出)。
以下是搜的资料:
1,什么是时间片轮转:
时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法是时间片调度。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。调度程序所要做的就是维护一张就绪进程列表,,当进程用完它的时间片后,它被移到队列的末尾。
时间片轮转调度中唯一有趣的一点是时间片的长度。从一个进程切换到另一个进程是需要一定时间的--保存和装入寄存器值及内存映像,更新各种表格和队列等。假如进程切换(process switch) - 有时称为上下文切换(context switch),需要5毫秒,再假设时间片设为20毫秒,则在做完20毫秒有用的工作之后,CPU将花费5毫秒来进行进程切换。CPU时间的20%被浪费在了管理开销上。
为了提高CPU效率,我们可以将时间片设为500毫秒。这时浪费的时间只有1%。但考虑在一个分时系统中,如果有十个交互用户几乎同时按下回车键,将发生什么情况?假设所有其他进程都用足它们的时间片的话,最后一个不幸的进程不得不等待5秒钟才获得运行机会。多数用户无法忍受一条简短命令要5秒钟才能做出响应。同样的问题在一台支持多道程序的个人计算机上也会发生。
结论可以归结如下:时间片设得太短会导致过多的进程切换,降低了CPU效率;而设得太长又可能引起对短的交互请求的响应变差。将时间片设为100毫秒通常是一个比较合理的折衷。
参考:
2,一个相似问题的答案:
处理器同一个时间只能处理一个任务。处理器在处理多任务的时候,就要看请求的时间顺序,如果时间一致,就要进行预测。挑到一个任务后,需要若干步骤才能做完,这些步骤中有些需要处理器参与,有些不需要(如磁盘控制器的存储过程)。不需要处理器处理的时候,这部分时间就要分配给其他的进程。原来的进程就要处于等待的时间段上。经过周密分配时间,宏观上就象是多个任务一起运行一样,但微观上是有先后的,就是时间片轮换。
参考:
3,请问什么是CPU的时间片?
分时操作系统是把CPU的时间划分成长短基本相同的时间区间,即"时间片",通过操作系统的管理,把这些时间片依次轮流地分配给各个用户使用.如果某个作业在时间片结束之前,整个任务还没有完成,那么该作业就被暂停下来,放弃CPU,等待下一轮循环再继续做.此时CPU又分配给另一个作业去使用.由于计算机的处理速度很快,只要时间片的间隔取得适当,那么一个用户作业从用完分配给它的一个时间片到获得下一个CPU时间片,中间有所"停顿";但用户察觉不出来,好像整个系统全由它"独占"似的.
java时间片是什么的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java线程时间片、java时间片是什么的信息别忘了在本站进行查找喔。
发布于:2022-12-13,除非注明,否则均为
原创文章,转载请注明出处。