java问题,main方法中开启了一组java 线程组,然后希望这组java 线程组全执行完之后再继续main方法向下进行

怎么在java main方法里用一个线程的sleep()方法让一个循环执行一次后阻塞一秒再循环下一次_百度知道
怎么在java main方法里用一个线程的sleep()方法让一个循环执行一次后阻塞一秒再循环下一次
如题:怎么在main方法里用一个线程的sleep()方法让一个循环执行一次后阻塞一秒再循环下一次请写一个例子出来,感激不尽
谢谢,这个我会了,但是在阻塞这一秒的时候程序却执行了其他的代码,请问我要如何做到程序在阻塞的这一秒时间内,程序不会执行其他代码呢。提示:当前程序中只有两个线程,一个线程是阻塞500毫秒,一个线程是1000毫秒。要求如下:首先,我要保证500毫秒的线程优先执行,其次,再执行1000毫秒的线程。最后,当这两个线程都执行完毕后,再执行其他代码。
我有更好的答案
package com.tarena.public class asdfsd { public static void main(String[] args) {
final Thread t1 = new Thread(){
public void run(){
int i = 0;
while(i&10){
System.out.println(&t1:&+i++);
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
final Thread t2 = new Thread(){
public void run(){
int i = 0;
t1.join();
} catch (InterruptedException e1) {
e1.printStackTrace();
while(i&10){
System.out.println(&t2:&+i++);
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
Thread t3 = new Thread(){
public void run(){
int i = 0;
t1.join();
t2.join();
} catch (InterruptedException e1) {
e1.printStackTrace();
while(i&10){
System.out.println(&t3:&+i++);
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
Thread t4 = new Thread(){
public void run(){
int i = 0;
t1.join();
t2.join();
} catch (InterruptedException e1) {
e1.printStackTrace();
while(i&10){
System.out.println(&t4:&+i++);
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
t1.start();
t2.start();
t3.start();
t4.start();
}}t3,t4都格式都一样,我就不排了。join方法,等待其他线程结束之后再执行,你在T2里加上t1.join,就是等待t1执行完,在执行自己的run方法,然后再其他线程里加上t1.t2.join
就OK了;亲测,给分!
亲,有点麻烦,麻烦优化行么
是哪里麻烦了...你直接粘到java里,把包名类名改一下,运行就知道了。运行结果:t1:0t1:1t1:2t1:3t1:4t1:5t1:6t1:7t1:8t1:9t2:0t2:1t2:2t2:3t2:4t2:5t2:6t2:7t2:8t2:9t4:0t3:0t4:1t3:1t4:2t3:2t4:3t3:3t4:4t3:4t4:5t3:5t4:6t3:6t4:7t3:7t4:8t3:8t4:9t3:9这些线程都是异步运行的,所以一开始都会运行的,没有顺序但是当,t2,t3,t4运行到t1.join的时候,线程就会产生阻塞,让t1运行,直到t1运行结束。t2也是一样。具体的join方法你可以看达内TTS多线程这一块的讲解。
采纳率:71%
别开两个线程 就开一个就符合你的要求了
可以写个例子么?
new Thread(){
public void run(){
while(true) {
//你要做的事情,1000是每一秒循环一次
Thread.sleep(1000);
} catch (Exception e) {
}}.start();
谢谢,这个我会了,但是在阻塞这一秒的时候程序却执行了其他的代码,请问我要如何做到程序在阻塞的这一秒时间内,程序不会执行其他代码呢。提示:当前程序中只有两个线程,一个线程是阻塞500毫秒,一个线程是1000毫秒。要求如下:首先,我要保证500毫秒的线程优先执行,其次,再执行1000毫秒的线程。最后,当这两个线程都执行完毕后,再执行其他代码。
为您推荐:
其他类似问题
线程的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。java问题:什么是线程组
在Java中每一个线程都归属于某个线程组管理的一员,例如在主函数main()主工作流程中产生一个线程,则产生的线程属于main这个线程组管理的一员。简单地说,线程组就是由线程组成的管理线程的类,这个类是java.lang.ThreadGroup类。
定义一个线程组,通过以下代码可以实现。
ThreadGroup group=new ThreadGroup("group");
Thread thread=new Thread(group,"the first thread of group");
ThreadGroup类中的某些方法,可以对线程组中的线程产生作用。例如,setMaxPriority()方法可以设定线程组中的所有线程拥有最大的优先权。
所有线程都隶属于一个线程组。那可以是一个默认线程组,亦可是一个创建线程时明确指定的组。在创建之初,线程被限制到一个组里,而且不能改变到一个不同的组。每个应用都至少有一个线程从属于系统线程组。若创建多个线程而不指定一个组,它们就会自动归属于系统线程组。
线程组也必须从属于其他线程组。必须在构建器里指定新线程组从属于哪个线程组。若在创建一个线程组的时候没有指定它的归属,则同样会自动成为系统线程组的一名属下。因此,一个应用程序中的所有线程组最终都会将系统线程组作为自己的“父”
之所以要提出“线程组”的概念,一般认为,是由于“安全”或者“保密”方面的理由。根据Arnold和Gosling的说法:“线程组中的线程可以修改组内的其他线程,包括那些位于分层结构最深处的。一个线程不能修改位于自己所在组或者下属组之外的任何线程”(注释①)
①:《The Java Programming Language》第179页。该书由Arnold和James Gosling编著,Addison-Wesley于1996年出版
没有更多推荐了,随时掌握考试动态Java多线程中线程的两种创建方式及比较代码示例
转载 &更新时间:日 08:41:48 & 作者:muzeet
这篇文章主要介绍了Java多线程中线程的两种创建方式及比较代码示例,简单介绍了线程的概念,并行与并发等,然后通过实例代码向大家展示了线程的创建,具有一定参考价值,需要的朋友可以了解下。
1.线程的概念:线程(thread)是指一个任务从头至尾的执行流,线程提供一个运行任务的机制,对于java而言,一个程序中可以并发的执行多个线程,这些线程可以在多处理器系统上同时运行。当程序作为一个应用程序运行时,java解释器为main()方法启动一个线程。
2.并行与并发:
(1)并发:在单处理器系统中,多个线程共享CPU时间,而操作系统负责调度及分配资源给它们。
(2)并行:在多处理器系统中,多个处理器可以同时运行多个线程,这些线程在同一时间可以同时运行,而不同于并发,只能多个线程共享CPU时间,同一时间只能运行一个线程。
3.线程的创建:
(1)基础概念:java中每个任务就是一个可运行对象,为了创建任务,必须首先定义任务类,任务类必须实现Runnable接口。而线程本质上讲就是便于任务执行的对象。一个线程的执行过程就是一个任务类中run()方法的执行到结束。
(2)通过Runnable接口创建线程:
  a.定义一个任务类实现Runnable接口,实现Runnable接口中的run()方法(run()方法告知系统线程该如何运行),run()方法中定义具体的任务代码或处理逻辑。
  b.定义了任务类后,为任务类创建一个任务对象。
  c.任务必须在线程中执行,创建一个Tread类的对象,将前面创建的实现了Runnable接口的任务类对象作为参数传递给Tread类的构造方法。
  d.调用Tread类对象的start()方法,启动一个线程。它会导致任务的run()方法被执行,当run()方法执行完毕,则线程就终止。
  实例代码:
package com.muzeet.
//每个任务都是Runable接口的一个实例,任务是可运行对象,线程是便于任务执行的对象。必须创建任务类,重写run方法定义任务
public class ThreadDemo1 implements Runnable {
private int countDown = 10;
//重写run方法,定义任务
public void run() {
while(countDown-- &0)
System.out.println("$" + Thread.currentThread().getName()
+ "(" + countDown + ")");
//调用start方法会启动一个线程,导致任务中的run方法被调用,run方法执行完毕则线程终止
public static void main(String[] args) {
Runnable demo1 = new ThreadDemo1();
Thread thread1 = new Thread(demo1);
Thread thread2 = new Thread(demo1);
thread1.start();
thread2.start();
System.out.println("火箭发射倒计时:");
程序运行结果:
火箭发射倒计时:
$Thread-0(9)
$Thread-0(8)
$Thread-0(7)
$Thread-0(6)
$Thread-0(5)
$Thread-0(4)
$Thread-0(3)
$Thread-0(2)
$Thread-0(1)
$Thread-0(0)
同时运行两个任务对象:
public static void main(String[] args) {
Runnable demo1 = new ThreadDemo1();
Runnable demo2 = new ThreadDemo1();
Thread thread1 = new Thread(demo1);
Thread thread2 = new Thread(demo2);
thread1.start();
thread2.start();
System.out.println("火箭发射倒计时:");
 运行结果:
火箭发射倒计时:
$Thread-0(9)
$Thread-0(8)
$Thread-0(7)
$Thread-0(6)
$Thread-1(9)
$Thread-0(5)
$Thread-1(8)
$Thread-0(4)
$Thread-1(7)
$Thread-0(3)
$Thread-1(6)
$Thread-1(5)
$Thread-0(2)
$Thread-1(4)
$Thread-1(3)
$Thread-1(2)
$Thread-1(1)
$Thread-1(0)
$Thread-0(1)
$Thread-0(0)
(3)继承Thread类来创建线程: 
  a.首先创建一个任务类extends Thread类,因为Thread类实现了Runnable接口,所以自定义的任务类也实现了Runnable接口,重新run()方法,其中定义具体的任务代码或处理逻辑。
  b.创建一个任务类对象,可以用Thread或者Runnable作为自定义的变量类型。
  c.调用自定义对象的start()方法,启动一个线程。
  示例代码:
package com.muzeet.
//每个任务都是Runable接口的一个实例,任务是可运行对象,线程即可运行对象。必须创建任务类,重写run方法定义任务
public class ExtendFromThread extends Thread {
private int countDown = 10;
//重写run方法,定义任务
public void run() {
while(countDown-- &0)
System.out.println("$" + this.getName()
+ "(" + countDown + ")");
//调用start方法会启动一个线程,导致任务中的run方法被调用,run方法执行完毕则线程终止
public static void main(String[] args) {
ExtendFromThread thread1 = new ExtendFromThread();
ExtendFromThread thread2 = new ExtendFromThread();
thread1.start();
thread2.start();
System.out.println("火箭发射倒计时:");
运行结果: 
火箭发射倒计时:
$Thread-0(9)
$Thread-0(8)
$Thread-0(7)
$Thread-0(6)
$Thread-0(5)
$Thread-0(4)
$Thread-0(3)
$Thread-0(2)
$Thread-0(1)
$Thread-0(0)
$Thread-1(9)
$Thread-1(8)
$Thread-1(7)
$Thread-1(6)
$Thread-1(5)
$Thread-1(4)
$Thread-1(3)
$Thread-1(2)
$Thread-1(1)
$Thread-1(0)
一个线程等待另一个线程结束后再执行:当执行PrintNum这个任务时,打印到数字50时,转而去执行打印字符C这个任务,知道线程thread4执行完才继续执行打印数字任务。
package com.muzeet.testT
public class PrintNum implements Runnable {
private int lastN
public PrintNum(int n)
public void run() {
// TODO Auto-generated method stub
Thread thread4 = new Thread(new PrintChar('c', 40));
thread4.start();
for(int i=1;i&=lastNi++)
System.out.println(" " + i);
if(i == 50)
thread4.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
4.两种方法的比较(转载)
首先分析两种方式的输出结果,同样是创建了两个线程,为什么结果不一样呢?
使用实现Runnable接口方式创建线程可以共享同一个目标对象(TreadDemo1tt=newTreadDemo1();),实现了多个相同线程处理同一份资源。当第一个线程执行完任务后,countDown已经为0,所以第二个线程就不会输出。而继承Thread创建线程的方式,new出了两个任务类对象,有各自的成员变量,相互之间不干扰。
然后再看一段来自JDK的解释:
Runnable接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个称为run的无参数方法。
设计该接口的目的是为希望在活动时执行代码的对象提供一个公共协议。例如,Thread类实现了Runnable。激活的意思是说某个线程已启动并且尚未停止。
此外,Runnable为非Thread子类的类提供了一种激活方式。通过实例化某个Thread实例并将自身作为运行目标,就可以运行实现Runnable的类。大多数情况下,如果只想重写run()方法,而不重写其他Thread方法,那么应使用Runnable接口。这很重要,因为除非程序员打算修改或增强类的基本行为,否则不应为该类创建子类。(推荐使用创建任务类,并实现Runnable接口,而不是继承Thread类)
采用继承Thread类方式:
(1)优点:编写简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this,即可获得当前线程。
(2)缺点:因为线程类已经继承了Thread类,所以不能再继承其他的父类。
采用实现Runnable接口方式:
(1)优点:线程类只是实现了Runable接口,还可以继承其他的类。在这种方式下,可以多个线程共享同一个目标对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。
(2)缺点:编程稍微复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法。
以上就是本文关于Java多线程中线程的两种创建方式及比较代码示例的全部内容,希望对大家有所帮助。如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具豆丁微信公众号
君,已阅读到文档的结尾了呢~~
Java程序设计教学做一体化教程__多线程(精),java多线程视频教程,java多线程教程,java多线程并发教程,java最新教程视频教学,java 多线程,java多线程实例,java多线程面试题,java多线程编程实例,java多线程设计模式
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
Java程序设计教学做一体化教程__多线程(精)
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 java main 线程 的文章

 

随机推荐