‘壹’ java多线程实现
程序如下:
/**
*
* GuiTuSaiPao.java
* @author Antonio
* 2009年9月2日20:16:33
* 实现Runnable接口中的run方法
*
*/
public class GuiTuSaiPao implements Runnable {
private String name;
private int length=0;
public GuiTuSaiPao(){}
public GuiTuSaiPao(String name){
this.name=name;
}
public void run(){
while(true){
//每次停500毫秒
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
//向前跑十米
length+=10;
System.out.println(name+"已跑了"+length+"米.");
//到达终点
if(length>=100){
System.out.println(name+",已经到达终点!");
//结束赛跑,break
break;
}
}
}
public static void main(String[] args) {
GuiTuSaiPao wugui=new GuiTuSaiPao("乌龟");
GuiTuSaiPao tuzi=new GuiTuSaiPao("兔子");
Thread thread=new Thread(wugui);
Thread thread2=new Thread(tuzi);
//启动线程
thread.start();
thread2.start();
}
}
输出结果:(不一定每次都一样!)
乌龟已跑了10米.
兔子已跑了10米.
兔子已跑了20米.
乌龟已跑了20米.
乌龟已跑了30米.
兔子已跑了30米.
兔子已跑了40米.
乌龟已跑了40米.
兔子已跑了50米.
乌龟已跑了50米.
乌龟已跑了60米.
兔子已跑了60米.
乌龟已跑了70米.
兔子已跑了70米.
乌龟已跑了80米.
兔子已跑了80米.
兔子已跑了90米.
乌龟已跑了90米.
兔子已跑了100米.
兔子,已经到达终点!
乌龟已跑了100米.
乌龟,已经到达终点!
完全看rp,这就是线程!
给分吧,哈哈
‘贰’ java中多线程常见的几个参数
java中多线程常见的几个参数
sleep:在指定的毫秒数内让当前正在执行的线程休眠(暂停执行).
此操作受到系统计时器和调度程序精度和准确性的影响。
该线程不丢失任何监视器的所属权。
调用sleep的时候锁并没有被释放。
休眠
Java SE5引入了更加显示的sleep()作为TimeUnit类的一部分,这个方法允许你指定sleep()延迟的时间单元,因此可以提供更好的可阅读性。
wait:调用wait使线程挂起,直到线程得到了notify或notifyAll消息,线程才会进入就绪状态。
使你可以等待某个条件发生变化,而改变这个条件超出了当前方法的控制能力。
线程的执行被挂起,对象上的锁被释放。意味着另一个任务可以获得这个锁。
因此在该对象中的其他synchronized方法可以在wait期间被调用。
yield:相当于:我的工作已经做的差不多了,可以让给别的线程使用CPU了。
当调用yield时,你也是在建议具有相同优先级的其他线程可以运行。
对于任何重要的控制或在调整应用时,都不能依赖于yield。
yield并不意味着退出和暂停,只是,告诉线程调度如果有人需要,可以先拿去,我过会再执行,没人需要,我继续执行
调用yield的时候锁并没有被释放。
interrupt:中断线程。
Thread类包含interrupt()方法,因此你可以中止被阻塞的任务。
这个方法将设置线程的中断状态。
如果一个线程已经被阻塞,或者试图执行一个阻塞操作,那么设置这个线程的中断状态将抛出InterruptedException。
当抛出该异常或者该任何调用Thread.interrupted()时,中断状态将复位。
你在Executor上调用shutdownNow(),那么它将发送一个interrupt()调用给他启动的所有线程。
‘叁’ java多线程高级教程,这些你都懂了吗
(1)继承Thread类,重写run函数
创建:
class xx extends Thread{
public void run(){
Thread.sleep(1000) //线程休眠1000毫秒,sleep使线程进入Block状态,并释放资源
}}
开启线程:
对象.start() //启动线程,run函数运行
(2)实现Runnable接口,重写run函数
开启线程:
Thread t = new Thread(对象) //创建线程对象
t.start()
(3)实现Callable接口,重写call函数
Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务。
Callable和Runnable有几点不同:
①Callable规定的方法是call(),而Runnable规定的方法是run().
②Callable的任务执行后可返回值,而Runnable的任务是不能返回值的
③call()方法可抛出异常,而run()方法是不能抛出异常的。
④运行Callable任务可拿到一个Future对象,Future表示异步计算的结果。它提供了检查计算是否完成的方法,以等
待计算的完成,并检索计算的结果.通过Future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果
‘肆’ Java多线程最高可以开多少个线程
JAVA 最多可打开多少个线程:
如果系统性能够好,无限大。
如何测试:写个for循环,调用线程。for循环里面设置上限,不断调高上限,看什么时候,系统会崩掉。
‘伍’ java多线程
Thread.start()方法会启动一个新的线程并在该线程上开始执行该Thread类构造方法中传递的那个Runnable对象的run方法。此时run方法运行于该新线程上,而线程名为"线程",因此run方法中输出"线程"。而在main方法中手动地去调用run方法并不会创建并启动一个新的线程,此时run方法与普通方法没有区别,都运行于调用它的线程上,run方法是从main线程中调用的因此run方法中输出"main"。
‘陆’ java多线程的好处
1. 充分利用CPU资源
现在世界上大多数计算机只有一块CPU.因此,充分利用CPU资源显得尤为重要。当执行单线程程序时,由于在程序发生阻塞时CPU可能会处于空闲状态。这将造成大量的计算资源的浪费。而在程序中使用多线程可以在某一个线程处于休眠或阻塞时,而CPU又恰好处于空闲状态时来运行其他的线程。这样CPU就很难有空闲的时候。因此,CPU资源就得到了充分地利用。
2. 简化编程模型
如果程序只完成一项任务,那只要写一个单线程的程序,并且按着执行这个任务的步骤编写代码即可。但要完成多项任务,如果还使用单线程的话,那就得在在程序中判断每项任务是否应该执行以及什么时候执行。如显示一个时钟的时、分、秒三个指针。使用单线程就得在循环中逐一判断这三个指针的转动时间和角度。如果使用三个线程分另来处理这三个指针的显示,那么对于每个线程来说就是指行一个单独的任务。这样有助于开发人员对程序的理解和维护。
3. 简化异步事件的处理
当一个服务器应用程序在接收不同的客户端连接时最简单地处理方法就是为每一个客户端连接建立一个线程。然后监听线程仍然负责监听来自客户端的请求。如果这种应用程序采用单线程来处理,当监听线程接收到一个客户端请求后,开始读取客户端发来的数据,在读完数据后,read方法处于阻塞状态,也就是说,这个线程将无法再监听客户端请求了。而要想在单线程中处理多个客户端请求,就必须使用非阻塞的Socket连接和异步I/O.但使用异步I/O方式比使用同步I/O更难以控制,也更容易出错。因此,使用多线程和同步I/O可以更容易地处理类似于多请求的异步事件。
4. 使GUI更有效率
使用单线程来处理GUI事件时,必须使用循环来对随时可能发生的GUI事件进行扫描,在循环内部除了扫描GUI事件外,还得来执行其他的程序代码。如果这些代码太长,那么GUI事件就会被“冻结”,直到这些代码被执行完为止。
在现代的GUI框架(如SWING、AWT和SWT)中都使用了一个单独的事件分派线程(event dispatch thread,EDT)来对GUI事件进行扫描。当我们按下一个按钮时,按钮的单击事件函数会在这个事件分派线程中被调用。由于EDT的任务只是对GUI事件进行扫描,因此,这种方式对事件的反映是非常快的。
5. 节约成本
提高程序的执行效率一般有三种方法:
(1)增加计算机的CPU个数。
(2)为一个程序启动多个进程
(3)在程序中使用多进程。
第一种方法是最容易做到的,但同时也是最昂贵的。这种方法不需要修改程序,从理论上说,任何程序都可以使用这种方法来提高执行效率。第二种方法虽然不用购买新的硬件,但这种方式不容易共享数据,如果这个程序要完成的任务需要必须要共享数据的话,这种方式就不太方便,而且启动多个线程会消耗大量的系统资源。第三种方法恰好弥补了第一种方法的缺点,而又继承了它们的优点。也就是说,既不需要购买CPU,也不会因为启太多的线程而占用大量的系统资源(在默认情况下,一个线程所占的内存空间要远比一个进程所占的内存空间小得多),并且多线程可以模拟多块CPU的运行方式,因此,使用多线程是提高程序执行效率的最廉价的方式。
‘柒’ java有多线程机制
线程是依附于进程的,进程是分配资源的最小单位,一个进程可以生成多个线程,这些线程拥有共享的进程资源。就每个线程而言,只有很少的独有资源,如控制线程运行的线程控制块,保留局部变量和少数参数的栈空间等。线程有就绪、阻塞和运行三种状态,并可以在这之间切换。也正因为多个线程会共享进程资源,所以当它们对同一个共享变量/对象进行操作的时候,线程的冲突和不一致性就产生了。线程这个概念在这里就不详述了,如果还不是很清楚地,可以查些相关资料。
多线程并发环境下,本质上要解决地是这两个问题:
线程之间如何通信。
线程之间如何同步。
概括起来说就是:线程之间如何正确地通信。这是本系列所需要讲的主题。虽然说的是在Java层面如何保证,但会涉及到java虚拟机、Java内存模型,以及Java这样的高级语言最终是要映射到CPU来执行(关键原因是如今的CPU有缓存、并且是多核的),所以本系列也会涉及一定的操作系统/硬件方面的知识,虽然有些难懂,但对于深刻把握多线程是至关重要的,所以需要多花一些时间。
‘捌’ Java 多线程
for(int i=0;i<00;i++)//这里i的值写错了 改一下就是了
{
System.out.println("Main 函数:---"+i);
}
还有 你这里看着好像是有100个线程是吧 其实这一百次输出只是一个线程在输出 你只开启了一个Thread
也就是只开启了一个线程
‘玖’ 如何掌握java多线程,高并发,大数据方面的技能
线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。(线程是cpu调度的最小单位)
线程和进程一样分为五个阶段:创建、就绪、运行、阻塞、终止。
多进程是指操作系统能同时运行多个任务(程序)。
多线程是指在同一程序中有多个顺序流在执行。
在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口.(其实准确来讲,应该有三种,还有一种是实现Callable接口,并与Future、线程池结合使用。