子线程操作主线程的List java java主线程和子线程的区别
转载
/**
* 基础知识:
* 线程:线程与进程相似,是一段完成某个特定功能的代码,是程序中单个顺序控制的流程,但与进程不同的
* 是,同类的多个线程是共享一块内存空间和一组系统资源。所以系统在各个线程之间切换时,开销要
* 比进程小的多,正因如此,线程被称为轻量级进程。一个进程中可以包含多个线程。
* 主线程:
* Java程序至少会有一个线程,这就是主线程,程序启动后是由JVM创建主线程,程序结束时由JVM停
* 止主线程。主线程它负责管理子线程,即子线程的启动、挂起、停止等等操作。图23-2所示是进程、
* 主线程和子线程的关系,其中主线程负责管理子线程,即子线程的启动、挂起、停止等操作
*/
public class Test implements Runnable {
//代码案例
//编写执行代码
@Override
public void run() {
for (int i=0;i<10;i++){
//打印次数和线程名字
System.out.println("第"+i+"次执行"+Thread.currentThread().getName());
//随机生成休眠时间
long sleepTime = (long) (1000 * Math.random());
}
//线程结束
System.out.println("执行完成"+Thread.currentThread().getName());
}
// 获得主线程
// Thread mainThread= Thread.currentThread();
// getName();获得线程的名称,主线程是main由JVM分配
// System.out.println("主线程名称:"+mainThread.getName());
/**
* 创建子线程:
* Java中创建一个子线程涉及到:java.lang.Thread()类和java.lang.Runnable接口。
* Thread是线程类,创建一个Thread对象就会产生一个新的线程。。而线程执行的程序代码是在实现Runnable接口
* 对象的run()方法中编写的,实现Runnable接口对象是线程执行的对象
*
* 线程执行对象实现Runnable接口的run()方法,run()方法是线程执行的入口,该线程要执行程序代码都是在此编写的
* run方法称为线程体
*
*
* 提示:
* 主线程中执行入口是main(String[] args)方法,这里可以控制程序的流程,管理其他的子线
* 程等。子线程执行入口是线程执行对象(实现Runnable接口对象)的run()方法,在这个方法可以
* 编写子线程相关处理代码。
*
*/
/**
* 实现Runnable接口
* 创建线程Thread对象时,可以将线程执行对象传递给他这时需要Thread类下的两个构造方法
* 1.Thread(Runnable target,String name);target是线程执行对象,实现Runnable接口。name为线程的名字
* 2.Thread(Runnable target);target是线程执行对象,实现Runnable接口。
*/
public static void main(String[] args) {
//创建线程t1,参数是一个线程执行对象Test
Thread t1=new Thread(new Test() );
//开始执行t1
t1.start();
//创建线程t2,参数古是一个线程执行对象Test
Thread t2=new Thread(new Test(),"MyThread");
//开始执行线程t2
t2.start();
}
/**
* 上述代码创建了两个子线程,见代码第①行和第③行,构造方法参数是线程执行对象Runner,其中代
* 码第①行的构造方法没有指定线程的名字,代码第③行的构造方法指定了线程名字。线程创建完成还
* 需要调用start()方法才能执行,见代码第②行和第④行,start()方法一旦调用线程进入可以执行状态,
* 可以执行状态下的线程等待CPU调度执行,CPU调用后线程进行执行状态,运行run()方法。
*/
}
/**
* 继承Thread线程类
* 事实上Thread类方法也实现了Runnable接口,所以Thread类也可以作为线程执行对象,这需要继承Thread类,覆盖run方法
*
*/
//线程执行对象
public class MyThread extends Thread{
public MyThread(){
super();
}
public MyThread(String name){
super(name);
}
//编写执行线程代码
@Override
public void run() {
for (int i=0;i<10;i++){
//打印次数和线程的名字
System.out.println("执行了第"+i+"次"+getName());
long sleepTime=(long) (1000*Math.random());
}
System.out.println("线程执行结束"+getName());
}
public static void main(String[] args) {
//创建线程t1
Thread t1=new Thread(new MyThread());
t1.start();
//创建线程t2
Thread t2=new Thread("MyThread");
t2.start();
}
}
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。