多线程(1)- 线程的创建与启动
来源:互联网 发布:越南 共产 知乎 编辑:程序博客网 时间:2024/03/29 17:32
进程:是一个正在执行中的程序。每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元
线程:就是进程中一个独立的控制单元,线程在控制着进程的执行
主线程:Jvm 启动的时候会有一个进程java.exe.该进程中至少一个线程负责java程序的执行。而且这个线程运行的代码存在于main方法中,该线程称之为主线程。
创建线程方法1:
- 定义类继承Thread。
- 复写Thread类中的run方法。
目的:将自定义代码存储在run方法,让线程运行。 - 调用线程的start方法,
目的:启动线程,调用run方法。
class Demo extends Thread{ public void run() //复写run方法,存储线程要运行的代码 { for(int x=0; x<60; x++) System.out.println("demo run"+x); }}class test { public static void main(String[] args) { for(int x=0; x<4000; x++) System.out.println("Hello World!"); Demo d = new Demo(); //创建好一个线程。 d.start(); //开启线程并执行该线程的run方法。 for(int x=0; x<60; x++) System.out.println("Hello World!--"+x); }}
发现运行结果每一次都不同。因为多个线程都获取cpu的执行权。cpu执行到谁,谁就运行。
明确一点,在某一个时刻,只能有一个程序在运行(多核除外),cpu在做着快速的切换,以达到看上去是同时运行的效果。我们可以形象把多线程的运行行为在互相抢夺cpu的执行权。这就是多线程的一个特性:随机性。谁抢到谁执行,至于执行多长,cpu说的算。
创建线程方法2:
- 定义类实现Runnable接口
- 覆盖Runnable接口中的run方法
将线程要运行的代码存放在该run方法中 - 通过Thread类建立线程对象。
- 将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
注意:自定义的run方法所属的对象是Runnable接口的子类对象。
所以要让线程去指定指定对象的run方法,就必须明确该run方法所属对象。 - 调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。
class Demo implements Runnable //实现Runnable接口{ private int x=100; public void run() //复写run方法,存储线程要运行的代码 { while(x>0) System.out.println(Thread.currentThread().getName()+"--run--"+x--); }}class test { public static void main(String[] args) { Demo d=new Demo(); Thread t1=new Thread(d); //创建两个线程对象,传入Runnable接口的子类对象 Thread t2=new Thread(d); t1.start(); //开启线程并执行该线程的run方法。 t2.start(); }}
实现方式避免了单继承的局限性,在定义线程时,建议使用实现方式。
两种方式区别:
继承Thread:线程代码存放Thread子类run方法中。
实现Runnable,线程代码存在接口的子类的run方法。
常用方法:
class ThreadTest { public static void main(String[] args) { new Thread() { public void run() { for(int x=0; x<100; x++) { System.out.println(Thread.currentThread().getName()+"....."+x); } } }.start(); Runnable r = new Runnable() { public void run() { for(int x=0; x<100; x++) { System.out.println(Thread.currentThread().getName()+"....."+x); } } }; new Thread(r).start(); }}
线程的五种状态
0 0
- 多线程(1)- 线程的创建与启动
- 初见Java多线程(二、线程的创建与启动)
- 多线程1(线程的创建和启动)
- 多线程示例(一) 线程的创建与启动
- 多线程(2)-java线程的创建与启动
- 多线程-2-线程创建与启动
- java多线程2(线程的创建方式以及启动)
- 多线程(2)线程的创建和启动
- 多线程01--线程的创建和启动
- java并发多线程,线程的创建启动
- Java线程的创建与启动(1)
- 线程的创建与启动
- JAVA线程的创建与启动线程
- 多线程编程(1):线程的启动
- iOS多线程学习笔记之二:线程创建与启动
- 马士兵J2SE-第九章-多线程机制-线程的创建与启动
- C#多线程开发1:使用Thread类创建与启动线程
- C# 多线程开发 1:使用 Thread 类创建与启动线程
- 392. Is Subsequence
- wait,notify,非阻塞队列实现生产者,消费者模型
- Qt超强精美绘图控件
- vc中ADO执行存储过程方法记录
- Java中如何把一下字符串转换成map
- 多线程(1)- 线程的创建与启动
- yolo源码分析之demo.py
- [JZOJ5077]树的难题
- 汉字转换汉语拼音
- SentOS安装mysql
- 组装机 重装系统 WIN7 WIN10重装
- SpringSecurity3.2.5自定义角色及权限的教程
- 详解js的六大数据类型
- TypeError: 'MongoClient' object is not callable——一个小错误,数据库的名字没用中括号