class FirstThread extends Thread
{
public void run(){
for(int i=0;i<20;i++)
System.out.println("FirstThread---->"+i);
}
}
class Test
{
public static void main(String args[]){
//生成线程类对象
FirstThread ft=new FirstThread();
//启动线程,线程开始运行
ft.start();
for(int i=0;i<20;i++)
System.out.println("main--->"+i);
}
}
从结果看出,两个线程是交替着执行的;
2.两种实现多线程的方法:继承Thread类,实现Runnable接口。
1)实现Thread类:
public class NumberThread extends Thread
{
private int k; //序列初始值
public NumberThread(String name,int k){
super(name);
this.k=k;
}
public NumberThtead(String name){
this(name,0);
}
public void run(){//覆盖run()方法的线程体
int i=k;
System.out.print("\n"+this.getName()+": ");
while(i<50){
System.out.print(i+" ");
i+=2;
}
System.out.println(this.getName()+"结束");
}
public static void main(String args[]){
NumberThread thread_odd=new NumberThread("奇数线程",1);
NumberThread thread_even=new NumberThread("偶数线程",2);
thread_odd.start();
thread_ever.start();
System.out.println("activeCount="+thread_even.activeCount()); //返回当前活动线程个数
}
}
2)实现Runnable接口:
例1,
class RunnableImpl implements Runnable
{
public void run(){
for(int i=0;i<20;i++){
System.out.println("Runnable--->"+i);
}
}
}
class Test
{
public static void main(String args[])
{
//生成一个Runnable接口实现类的对象
RunnableImpl ri=new RunnableImpl();
//生成一个Thread对象,并将Runnable接口实现类的对象作为参数
//传递给该Thread对象
Thread t=new Thread(ri);
//通知Thread对象,执行Start方法
t.start();
}
}
例2,
public class NumberRunnable implements Runnable
{
private int k;
public NumberRunnable(int k){
this.k=k;
}
public NumberRunnable(){
this(0);
}
public void run(){
int i=k;
System.out.println();
while(i<50){
System.out.print(i+" ");
i+=2;
}
System.out.println("结束!");
}
public static void main(String args[]){
NumberRunnable odd=new NumberRunnable(1);
Thread thread_odd=new Thread(odd,"基数线程");
thread_odd.start();
new Thread(new NumberRunnable(2),"偶数线程").start();
}
}
- 大小: 1.8 KB
- 大小: 1.4 KB
分享到:
相关推荐
在多线程编程中,线程间的协作是关键任务之一,尤其当需要一个线程在完成特定工作后通知另一个线程继续执行时。这个过程通常涉及到线程同步和异步的概念。本文将深入探讨线程异步工作以及如何在C++中实现一个线程在...
QTcpServer多线程 ...注意:如果你想处理在另一个线程一个新的QTcpSocket对象传入连接,您必须将socketDescriptor传递给其他线程,并创建了QTcpSocket对象存在并使用其setSocketDescriptor()方法。
在Java编程中,多线程查询数据库是一种常见的优化策略,特别是在处理大数据量或者需要并行执行多个查询时。本文将详细探讨如何利用Java的多线程技术和线程池来实现并发查询数据库,以及相关的文件`BatchDataUtil....
线程一完成以下操作: * 设置全局变量 key 的值为字符串“hello world” * 打印 3 次字符串“当前线程 ID:key 值” * 接收到线程二发送的取消请求信号后退出 * 结束的时候打印字符串“thread1 ,exited!:key 值...
一个新构建的线程对象是由其父线程来进行空间分配的,而子线程继承了父线程的是否为 Daemon、优先级和加载资源的 contextClassLoader 以及可继承的 ThreadLocal,同时会分配一个唯一的 ID 来标识这个线程。...
例如,`yield` 函数、`get_id` 函数返回当前线程的标识、`sleep_for` 函数停止当前线程一段时间、`sleep_until` 函数停止当前线程直到某个时间点。 3. Mutual exclusion(互斥量) C++11 的线程库提供了多种互斥量...
vivado设置多线程一劳永逸的方法
多线程编程的目的,就是"最大限度地利用CPU资源",当某一线程的处理不需要占用CPU而只和I/O等资源打交道时,让需要占用CPU资源的其它线程有机会获得CPU资源。从根本上 说,这就是多线程编程的最终目的。 单线程...
从结果中可以看出,两个线程共享CPU时间,同一时间只能运行一个线程,且运行哪一个线程是随机的。 3. 自行设计个性化的内核线程,给出运行结果。 在这个实验中,我们自行设计了一个个性化的内核线程,实现了两个...
利用线程池开多个线程在linux下运行
使用场景为一个线程写一个线程读完全不需要锁。可以设定buffer的初始块及数量,初始块是固定大小的,当需要扩环时会动态创建块即不像其它的库块满了就写失败了,当释放时会将动态创建的块还给系统,初始块还给自己的...
在MFC应用中,例如,可以创建一个工作者线程用于长时间的数据库查询,而用户界面线程则保持正常响应,展示查询进度。当查询完成后,工作者线程通过PostThreadMessage向用户界面线程发送消息,告知查询结果,由用户...
在IT领域,多线程是一种常见的编程模型,用于提高程序的执行效率和并发性。本实验的任务是设计并实现一个数据单元,该单元包含学号和姓名两个字段,并且使用两个线程,一个用于写入数据,另一个用于读取数据。这种...
- **事件(Events)**:通过WaitHandle类的子类(如ManualResetEvent或AutoResetEvent)来同步线程,一个线程等待特定事件发生,另一个线程触发事件。 - **条件变量(Conditional Variables)**:允许线程在满足...
综上所述,线程的内存占用不是一个固定的值,它受多种因素影响,包括操作系统、线程类型(主线程或子线程)、编译器设置以及程序的具体运行行为。因此,优化线程内存使用时需要综合考虑这些因素,以实现更高效、更...
用Java实现消费者与生产者两个线程进行调度
在这个项目中,“TCP-接收线程和发送线程”是一个C/C++实现的多线程编程示例,旨在展示如何在服务器端和客户端之间有效地管理数据的接收和发送。以下将详细介绍相关的知识点。 首先,我们要理解TCP的基本原理。TCP...
本篇概要 1.线程与多线程 2.进程与多进程 ...一个线程可以看成是一个有序的指令流(完成特定任务的指令),并且可以通过操作系统来调度这些指令流。 线程通常位于进程程里面,由一个程序计数器、一个堆栈
启动两个线程,一个线程打印1~52,另一个线程打印A~Z
例如,进程A可以有线程一、线程二和线程三,它们都访问同一个用户地址空间,但各自执行不同的任务。 线程机制主要有以下几种类型: 1. 用户级线程:线程管理完全由用户空间的线程库完成,操作系统不直接参与。当一...