一、定义线程
1、扩展java.lang.Thread类。
此类中有个run()方法,应该注意其用法:
public void run()
如果该线程是使用独立的 Runnable
运行对象构造的,则调用该 Runnable
对象的 run
方法;否则,该方法不执行任何操作并返回。
Thread
的子类应该重写该方法。
2、实现java.lang.Runnable接口。
void run()
使用实现接口 Runnable
的对象创建一个线程时,启动该线程将导致在独立执行的线程中调用对象的 run
方法。
方法 run
的常规协定是,它可能执行任何所需的操作。
二、实例化线程
1、如果是扩展java.lang.Thread类的线程,则直接new即可。
2、如果是实现了java.lang.Runnable接口的类,则用Thread的构造方法:
Thread(Runnable target)
Thread(Runnable target, String name)
Thread(ThreadGroup group, Runnable target)
Thread(ThreadGroup group, Runnable target, String name)
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
三、启动线程
在线程的Thread对象上调用start()方法,而不是run()或者别的方法。
在调用start()方法之前:线程处于新状态中,新状态指有一个Thread对象,但还没有一个真正的线程。
在调用start()方法之后:发生了一系列复杂的事情
启动新的执行线程(具有新的调用栈);
该线程从新状态转移到可运行状态;
当该线程获得机会执行时,其目标run()方法将运行。
注意:对Java来说,run()方法没有任何特别之处。像main()方法一样,它只是新线程知道调用的方法名称(和签名)。因此,在Runnable上或者Thread上调用run方法是合法的。但并不启动新的线程。
四、例子
package thread_test;
/**
* 测试Runnable类实现的多线程程序
*
* @author ciding
* @createTime Dec 7, 2011 9:38:52 AM
*
*/
public class TestRunnable {
public static void main(String[] args) {
StrRunnable sr1 = new StrRunnable("chenfengbin");
StrRunnable sr2 = new StrRunnable("cidng");
Thread t1 = new Thread(sr1);
Thread t2 = new Thread(sr2);
t1.start();
t2.start();
StrThread st1 = new StrThread("chenfengbin");
StrThread st2 = new StrThread("cidng");
Thread t3 = new Thread(st1);
Thread t4 = new Thread(st2);
t3.start();
t4.start();
}
}
/**
* 通过实现接口的多线程
*
* @author ciding
* @createTime Dec 8, 2011 10:20:28 PM
*
*/
class StrRunnable implements Runnable {
private String name;
public StrRunnable(String name) {
this.name = name;
}
public void run() {
for (int i = 0; i < 3; i++) {
for(long j=0;j<100000000;j++); //用来模拟一个非常耗时的操作,方便显示多线程效果。
System.out.println("Runnable下的" + name + ": " + i);
}
}
}
/**
* 通过继承类的多线程
*
* @author ciding
* @createTime Dec 8, 2011 10:20:50 PM
*
*/
class StrThread extends Thread{
private String name;
public StrThread(String name){
this.name = name;
}
public void run() {
for (int i = 0; i < 3; i++) {
for(long j=0;j<100000000;j++); //用来模拟一个非常耗时的操作,方便显示多线程效果。
System.out.println("Thread下的" + name + ": " + i);
}
}
}
运行结果:
Runnable下的chenfengbin: 0
Runnable下的cidng: 0
Thread下的chenfengbin: 0
Thread下的cidng: 0
Runnable下的chenfengbin: 1
Runnable下的cidng: 1
Thread下的chenfengbin: 1
Thread下的cidng: 1
Runnable下的chenfengbin: 2
Thread下的chenfengbin: 2
Runnable下的cidng: 2
Thread下的cidng: 2
思考问题:
1,直接调用run()方法,与一般程序有区别吗?会启动一个新的线程吗?那启动一个新线程是怎么运做的呢。
2,线程有名字吗?
3,线程是怎么调度的呢?我们是不是影响线程调度的方式。
4,线程有哪些运行状态?
5,线程都有哪些常见方法?
是的,这些问题将在后面的环节一一解答。
分享到:
相关推荐
Python 基础 之 python 线程知识点整理,并实现一个简单多线程 udp 聊天应用 目录 Python 基础 之 python 线程知识点整理,并实现一个简单多线程 udp 聊天应用 一、简单介绍 二、能学到 三、实现思路 四、效果...
java多线程模拟队列实现排队叫号,多线程模拟排队叫号取号 java多线程模拟队列实现排队叫号,多线程模拟排队叫号取号
vb多线程控件能实现简单的多线程,还是有很多限制
java 实现绘制指针时钟 和多线程服务器java 实现绘制指针时钟 和多线程服务器java 实现绘制指针时钟 和多线程服务器java 实现绘制指针时钟 和多线程服务器java 实现绘制指针时钟 和多线程服务器java 实现绘制指针...
java一些简单的多线程用法,适合初学者
参考了http://blog.csdn.net/gaoqiangz/article/details/6682895以后,弄了这个演示程序,以更为简单的方式实现了多线程,主线程与子线程的双向通讯:启动子线程、查询子线程状态,中止了线程等。原理请参考上述博文...
本例实现的是在主界面开一个新的线程在后台完成数据查询并根据提供的每页显示的数据行数计算出总页数,然后返回给主界面并显示在表格中。在等待查询的过程中,主界面会给用户简单的提示,提示用户后台正在处理数据。...
简单多线程编程入门,可以帮助你实现第一个多线程程序
用多线程模拟多进程实现银行家算法,或者不是最好,但是有效,程序写的较乱
先由一个简单的例子引出多线程 先作出这个简单的界面 “开始”对应的槽函数是:slotStart() “停止”对应的槽函数是:slotStop() 本例中的线程(workthread类)实现的功能是,从0到9循环打印,0至9各占一排。 ...
用java多线程简易实现生产者消费者模式的代码,用java多线程简易实现生产者消费者模式的代码。
简单的网络聊天程序,用多线程实现数据接收,带详细的注释,可以给初学者学习
一个简单的多线程代码示例,Java实现,用于实现同一时刻,只允许一个线程调用执行的代码块或类,即synchronized的如何使用(多线程实现),实现 Runnable
java socket 多线程 简易的实现方法 细节问题没有处理 适合新手
java多线程Socket简单实现
简单实现多线程同步示例(模拟购票系统),内容为实现多线程同步过程,模拟购票系统进行同步购买情况;该处并未考虑线程守护问题,后期将对线程锁等安全问题进行初步研究!
Java多线程实现数据切割批量执行,实现限流操作。 java线程池Executors实现数据批量操作。 批量异步Executors处理数据,实现限流操作,QPS限流。 线程池调用第三方接口限流实现逻辑。 案例适合: 1.批量处理大数据。...
全部写在一个类中,为第一次交的作业,代码有点乱,但能运行,可以实现多线程下载
实现简单多线程程序(VS2010控制台程序)
操作系统经典实验:多线程实现排序冒泡排序与快速排序,C++编写,简单易懂