java--多线程-实现线程
来源:互联网 发布:网络新媒体概论微盘 编辑:程序博客网 时间:2024/06/06 02:26
JAVA提供了并发机制,程序员在程序中可以执行多个线程,每个线程完成一个功能,并与其他线程并发执行。
Windows是个多任务操作系统,它以进程为单位,一个进程是一个包含自身地址的程序,每个独立执行的程序都称为进程。
也就是正在执行的程序。系统可以分配给每个进程一段有限的使用CPU的时间(也可以称为CPU时间片),CPU在这段时间中执行某个进程
然后下一个时间片又调到另一个进程中执行,由于CPU切换很快,所以是的每个进程看起来像在同一时间执行。
一个线程是进程中的执行流程,一个进程可以同时包括多个线程,每个线程也可以得到一小段程序的执行时间。这样一个进程就可以具有多个并发执行的线程。
如果一个进程需要完成多段代码的操作,就需要产生多线程。
产生线程的两种方式:
一、继承Thread类。
Thread类是java.lang包中的一个类。从这个类中实例化的对象代表线程。程序员启动一个新线程需要建立Thread实例。
Thread类中常见的构造方法:
1.public Thread(String threadName)
创建一个名称叫做threadName的县城对象。
2.public Thread();
当一个类继承Thread类就会覆盖父类中的run()方法,开启次线程则使用start()方法。
继承Threa类创建一个新线程语法:
public class ThreadTest extends Thread{
}
而真正完成功能的代码放在类中的run()方法中,
public run(){
二、实现Runnable接口。
如果需要建立一个继承其他类(非Thread)的程序,而且还要实现当前类的多线程,那么可以通过Runnable接口来实现。这种方式最多。
实现语法:
public class Thread extends Object implements Runnable
查询API发现,实质上Thread类是实现了Runnable接口,其中的run()方法正式对Runnable接口中的run()方法的实现。
实现Runnable接口的程序会创建一个Thread对象,并将Runnable对象与Thread对象相关联。
Thread类中的两个构造方法:
1.public Thread(Runnable R)
2.public Thread(Runnable R,String name);这两个构造方法的参数都存在Runnable实例,使用以上构造方法就可以将Runnable实例与Thead实例想关联。
使用Runnbale接口启动新的线程的步骤如下
1.定义类实现Runnable接口。
2.覆盖接口中的run方法,将线程的任务代码封装到run方法中。
3.通过Thread类创建线程对象,并将Runnable接口的子类对象作为Thead类的构造函数的参数进行传递。
为什么:
原因:因为线程的任务都封装在Runnable接口子类对象的run方法中。
所以要在线程对象创建是就必须明确要运行的任务
4.调用线程对象的start()方法开启线程。
实现Runnable接口,用了匿名内部类。
Windows是个多任务操作系统,它以进程为单位,一个进程是一个包含自身地址的程序,每个独立执行的程序都称为进程。
也就是正在执行的程序。系统可以分配给每个进程一段有限的使用CPU的时间(也可以称为CPU时间片),CPU在这段时间中执行某个进程
然后下一个时间片又调到另一个进程中执行,由于CPU切换很快,所以是的每个进程看起来像在同一时间执行。
一个线程是进程中的执行流程,一个进程可以同时包括多个线程,每个线程也可以得到一小段程序的执行时间。这样一个进程就可以具有多个并发执行的线程。
如果一个进程需要完成多段代码的操作,就需要产生多线程。
产生线程的两种方式:
一、继承Thread类。
Thread类是java.lang包中的一个类。从这个类中实例化的对象代表线程。程序员启动一个新线程需要建立Thread实例。
Thread类中常见的构造方法:
1.public Thread(String threadName)
创建一个名称叫做threadName的县城对象。
2.public Thread();
当一个类继承Thread类就会覆盖父类中的run()方法,开启次线程则使用start()方法。
继承Threa类创建一个新线程语法:
public class ThreadTest extends Thread{
}
而真正完成功能的代码放在类中的run()方法中,
public run(){
}
使用继承Tread创建线程。
public class ThreadTest extends Thread{private int count = 10;public void run(){while(true){//建立无限循环。System.out.println(count+" ");if(--count==0){//时count变量自建,当自减为零时推出循环。return;}}}public static void main(String[] args){new ThreadTest().start();//启动线程}}
二、实现Runnable接口。
如果需要建立一个继承其他类(非Thread)的程序,而且还要实现当前类的多线程,那么可以通过Runnable接口来实现。这种方式最多。
实现语法:
public class Thread extends Object implements Runnable
查询API发现,实质上Thread类是实现了Runnable接口,其中的run()方法正式对Runnable接口中的run()方法的实现。
实现Runnable接口的程序会创建一个Thread对象,并将Runnable对象与Thread对象相关联。
Thread类中的两个构造方法:
1.public Thread(Runnable R)
2.public Thread(Runnable R,String name);这两个构造方法的参数都存在Runnable实例,使用以上构造方法就可以将Runnable实例与Thead实例想关联。
使用Runnbale接口启动新的线程的步骤如下
1.定义类实现Runnable接口。
2.覆盖接口中的run方法,将线程的任务代码封装到run方法中。
3.通过Thread类创建线程对象,并将Runnable接口的子类对象作为Thead类的构造函数的参数进行传递。
为什么:
原因:因为线程的任务都封装在Runnable接口子类对象的run方法中。
所以要在线程对象创建是就必须明确要运行的任务
4.调用线程对象的start()方法开启线程。
实现Runnable接口,用了匿名内部类。
import java.awt.Container;//实现runnable接口来进行多线程。import java.net.URL;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.SwingConstants;import javax.swing.WindowConstants;public class SwingAndThread extends JFrame {/** * */private static final long serialVersionUID = 1L;private JLabel jl = new JLabel(); // 声明JLabel对象private static Thread t; // 声明线程对象private int count = 0; // 声明计数变量private Container container = getContentPane(); // 声明容器public SwingAndThread() {setBounds(300, 200, 250, 100); // 绝对定位窗体大小与位置container.setLayout(null); // 使窗体不使用任何布局管理器URL url = SwingAndThread.class.getResource("/1.gif"); // 获取图片的URLIcon icon = new ImageIcon(url); // 实例化一个Iconjl.setIcon(icon); // 将图标放置在标签中 // 设置图片在标签的最左方jl.setHorizontalAlignment(SwingConstants.LEFT);jl.setBounds(10, 10, 200, 50); // 设置标签的位置与大小jl.setOpaque(true);t = new Thread(new Runnable() { // 定义匿名内部类,该类实现Runnable接口public void run() { // 重写run()方法while (count <= 200) { // 设置循环条件 // 将标签的横坐标用变量表示jl.setBounds(count, 10, 200, 50);try {Thread.sleep(1000); // 使线程休眠1000毫秒} catch (Exception e) {e.printStackTrace();}count += 4; // 使横坐标每次增加4if (count == 200) {// 当图标到达标签的最右边,使其回到标签最左边count = 10;}}}});t.start(); // 启动线程container.add(jl); // 将标签添加到容器中setVisible(true); // 使窗体可视// 设置窗体的关闭方式setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);}public static void main(String[] args) {new SwingAndThread(); // 实例化一个SwingAndThread对象}}
阅读全文
0 0
- java--多线程-实现线程
- java多线程-线程的实现
- JAVA多线程实现和线程同步总结
- Java 多线程(二) 线程的实现
- Java的多线程-实现线程同步
- java多线程、线程池的实现
- java多线程(二):线程的实现
- JAVA多线程之多线程的实现
- Java多线程线程安全实现方式
- Java 多线程(二) 线程的实现
- Java 多线程(二) 线程的实现
- java 多线程 (一)线程的实现
- Java 多线程9:线程池实现原理
- JAVA多线程系列--线程实现方式
- java多线程之多线程的实现
- java 多线程学习笔记之 线程实现(线程阻塞)
- Java多线程----Java 线程池的原理与实现
- 【Java多线程】实现java线程的两种方式
- 一道面试题引发的思考
- ELK单机版搭建之ElasticSearch-head插件安装
- 1.初探vs项目文件结构
- Laravel5.1 实现第三方登录认证(包括微博、QQ、微信、豆瓣) 2017-01-08 18:08 457人阅读 评论(0) 收藏 举报 分类: laravel框架(33) 目录(?)[
- 类型兼容性的解决心方法
- java--多线程-实现线程
- awk命令【转】
- hibernate一级缓存与快照
- Lua 基本语法
- Scrapy爬虫入门教程 安装和基本使用
- php使用Url读取文件的内容及file_get_contents用法
- php ip2long 出现负数原因及解决方法
- BZOJ1023: [SHOI2008]cactus仙人掌图(单调队列优化DP)
- 补提交卡