线程的基本概念和操作

一:线程的基本概念

1.      调用run()方法

public class Demo1 {

publicstatic void main(String[] args) {

Thread1th1=new Thread1("线程A");

Thread1th2=new Thread1("线程B");

th1.run();

th2.run();

}

}

class Thread1 extends Thread{

privateString name;

publicThread1(String name){

this.name=name;

}

publicvoid run(){

for(inti=0;i<10;i++){

System.out.println(name+"运行i="+i);

}

}

}

2.      调用start()方法,报错

Thread1 th1=new Thread1("线程A");

th1.start();

th1.start();

3.      实现runnable接口

public class Demo1 {

publicstatic void main(String[] args) {

Thread1th1=new Thread1("线程A");

Threadt1=new Thread(th1);

t1.start();

}

}

class Thread1 implements Runnable{

privateString name;

publicThread1(String name){

this.name=name;

}

publicvoid run(){

for(inti=0;i<10;i++){

System.out.println(name+"运行i="+i);

}

}

}

总结:实现Runnable接口的优势

1.      多个相同的程序代码线程处理同一资源

2.      避免java单继承带来的局限

3.      增强程序的健壮性

二:线程的状态

1.      创建状态

Thread thread=newThread();

2.      就绪状态

thread.start();

3.      运行状态

thread.run();

4.      堵塞状态

sleep(),wait(),suspend()

5.      死亡状态

thread.stop();或者run()方法运行结束后

操作线程的相关方法

1.      线程名称

package com.cloud.day5;

public class day1 {

publicstatic void main(String[] args) {

MyThreadmt=new MyThread();

//系统自动设置线程名称

newThread(mt).start();

//自己设置线程名称

newThread(mt,"线程A").start();

}

}

class MyThread implements Runnable{

@Override

publicvoid run() {

for(inti=0;i<3;i++){

System.out.println(Thread.currentThread().getName()+"运行i="+i+"次");

}

}

}

2.      判断线程是否启动

package com.cloud.day5;

public class day1 {

publicstatic void main(String[] args) {

MyThreadmt=new MyThread();

Threadt=new Thread(mt,"线程");

System.out.println("线程启动前:"+t.isAlive());

t.start();

System.out.println("线程启动后:"+t.isAlive());

for(inti=0;i<3;i++){

System.out.println("main运行"+i);

}

System.out.println("代码执行完毕"+t.isAlive());

}

}

class MyThread implements Runnable{

@Override

publicvoid run() {

for(inti=0;i<3;i++){

System.out.println(Thread.currentThread().getName()+"运行i="+i+"次");

}

}

}

3.      线程强制运行

package com.cloud.day5;

public class day1 {

publicstatic void main(String[] args) {

MyThreadmt=new MyThread();

Threadt=new Thread(mt,"线程");

t.start();

for(inti=0;i<50;i++){

if(i>10){

try{

t.join();

}catch(Exceptione){}

}

System.out.println("main线程运行"+i);

}

}

}

class MyThread implements Runnable{

@Override

publicvoid run() {

for(inti=0;i<3;i++){

System.out.println(Thread.currentThread().getName()+"运行i="+i+"次");

}

}

}

4.      线程休眠

package com.cloud.day5;

public class day1 {

publicstatic void main(String[] args) {

MyThreadmt=new MyThread();

Threadt=new Thread(mt,"线程");

t.start();

}

}

class MyThread implements Runnable{

@Override

publicvoid run() {

for(inti=0;i<5;i++){

try{

Thread.sleep(500);

}catch (Exception e) {

}

System.out.println(Thread.currentThread().getName()+"运行i="+i+"次");

}

}

}

5.      线程的中断

package com.cloud.day5;

public class day1 {

publicstatic void main(String[] args) {

MyThreadmt=new MyThread();

Threadt=new Thread(mt,"线程");

t.start();

try{

Thread.sleep(2000);

}catch (Exception e) {

//TODO: handle exception

}

//中断线程执行

t.interrupt();

}

}

class MyThread implements Runnable{

@Override

publicvoid run() {

System.out.println("1.进入run方法");

try{

Thread.sleep(10000);

System.out.println("2.完成10秒休眠");

}catch (Exception e) {

System.out.println("3.终止休眠");

}

System.out.println("4.run方法正常结束");

}

}

6.      线程的优先级

package com.cloud.day5;

public class day1 {

publicstatic void main(String[] args) {

System.out.println("main线程的优先级:"+Thread.currentThread().getPriority());

Threadt1=new Thread(new MyThread(),"线程A");

Threadt2=new Thread(new MyThread(),"线程B");

Threadt3=new Thread(new MyThread(),"线程C");

t1.setPriority(Thread.MIN_PRIORITY);

t2.setPriority(Thread.MAX_PRIORITY);

t3.setPriority(Thread.NORM_PRIORITY);

t1.start();

t2.start();

t3.start();

}

}

class MyThread implements Runnable{

@Override

publicvoid run() {

for(inti=0;i<5;i++){

try{

Thread.sleep(500);

}catch (Exception e) {

}

System.out.println(Thread.currentThread().getName()+"运行i="+i+"次");

}

}

}

版权声明:博主原创文章,转载请说明出处。http://blog.csdn.net/dzy21

时间: 2024-12-15 01:37:27

线程的基本概念和操作的相关文章

Java深度历险(三)——Java线程?:基本概念、可见性与同步

开发高性能并发应用不是一件容易的事情.这类应用的例子包括高性能Web服务器.游戏服务器和搜索引擎爬虫等.这样的应用可能需要同时处理成千上万个请求.对于这样的应用,一般采用多线程或事件驱动的架构.对于Java来说,在语言内部提供了线程的支持.但是Java的多线程应用开发会遇到很多问题.首先是很难编写正确,其次是很难测试是否正确,最后是出现问题时很难调试.一个多线程应用可能运行了好几天都没问题,然后突然就出现了问题,之后却又无法再次重现出来.如果在正确性之外,还需要考虑应用的吞吐量和性能优化的话,就

有关进程和线程的小概念

# 1.线程与进程的区别是什么?(怎么理解怎么写)'''进程是程序运行的状态和过程.进程会占用内存中的一块空间,消耗资源.每个进程最少会有一个线程(主线程),可以有多个线程.pyyhon在运行的过程中最多只能有一个线程调用CPU资源,那是因为在每个进程前面有GIL全局解释器锁.多个线程通过全局解释器锁是靠操作系统分配的,同一时刻只能有一个线程获得CPU资源 ,如果该线程遇到IO操作,操作系统会将CPU分配给别的线程做运算,直到该线程IO操作结束继续计算.如果多线程计算过程调用了全局变量就需要注意

线程的基本概念 / 计算机程序的思维逻辑

创建线程 线程表示一条单独的执行流,它有自己的程序执行计数器,有自己的栈.下面,我们通过创建线程来对线程建立一个直观感受,在Java中创建线程有两种方式,一种是继承Thread,另外一种是实现Runnable接口,我们先来看第一种. 继承Thread Java中java.lang.Thread这个类表示线程,一个类可以继承Thread并重写其run方法来实现一个线程,如下所示: public class HelloThread extends Thread {        @Override 

09_1_线程的基本概念

09_1_线程的基本概念 1. 线程的基本概念 线程的一个程序内部的顺序控制流. 线程和进程的区别 每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销. 线程可以看成是轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小. 多进程:在程序系统中同时运行多个任务(程序). 多线程:在同一个应用程序中有多个顺序流同时执行 Java的线程是通过java.lang.Thread类来实现的. VM启动时会有一个自主方法(publi

java线程的基本概念

进程和线程 进程的诞生 操作系统中有2个任务A,B,任务A先执行,执行到一半需要io,因此要大量时间,在这个时间段内cpu是空闲的,浪费了资源,于是就有进程,当A暂时无法利用cpu,但是又不能销毁时,就把它暂存起来,让B来执行.B执行完或者需要A执行时,根据暂存的信息回复过来. 每个进程都对应一定的内存空间,并且只能使用自己的内存空间,并且保留程序的运行状态,这个也为进程切换提供了基础. 线程的诞生 第一,多核处理器的出现,为了更好的利用多核处理器,避免资源的浪费.第二程序的需要,人们需要在一个

Linux 下进程与线程的基本概念

2019-10-01 关键字:进程.线程.信号量.互斥锁 什么是程序? 程序就是存放在磁盘上的指令和数据的有序集合,就是源代码编译产物. 它是静态的. 什么是进程? 进程就是操作系统为执行某个程序所分配的资源的总称.进程是程序的一次执行过程,因此它与程序不同,它是动态的.它的生命周期包括创建.调度.执行和消亡. 进程的内容主要包括以下三个部分: 1.正文段: 2.用户数据段: 3.系统数据段. 其中正文段与用户数据段两部分是从程序当中来的.而系统数据段则是操作系统分配的用来管理这个进程用的. 系

java多线程(1) 线程的基本概念

一.线程的基本概念: 线程是一个程序里面不同的执行路径. 程序里面不同的执行路径,每一个分支都是一个线程. 进程:静态的概念.机器上的一个class文件,机器上的一个exe文件,这叫一个进程. 机器里面实际上运行的都是线程. window等.linux等都是多进程,多线程的系统. CPU的执行是这样的: CPU速度比较快,一秒钟算好几亿次,它把自己的时间分成一个一个的小时间片,这个时间片我执行你一会,再执行他一会,虽然有几十个线程, 没关系,执行这个一会,执行那个一会,挨着排的都执行一遍,但是对

基本概念及操作

基本概念及操作 实验介绍 本节实验主要有: 1.实验楼环境介绍 2.常用 Shell 命令及快捷键 3.Linux 使用小技巧 一.Linux 桌面环境介绍 相对于现在的 Windows 系统,UNIX/Linux 本身是没有图形界面的,我们通常在 Unix/Linux 发行版上看到的图形界面实际都只是运行在 Linux 系统之上的一套软件,类似 Windows95 之前的Windows 的图形界面实则也只是运行在 DOS 环境的一套软件.而 Linux 上的这套软件以前是XFree86,现在则

DNS基本概念及操作详解----------------转载

DNS基本概念及操作详解 目录: 1.DNS协议 2.DNS查询 2.1递归查询 2.2跌代查询 2.3反向查询 3.域维护 3.1全量AXFR传输 3.2增量IXFR传输 3.3通过NOTIFY 3.4动态更新 4.DNS安全 在很多人看来,DNS只是为外部提供DNS解析服务(我以前也是这么认为的,直到膝盖中了一箭),但作为互联网的基础设施,DNS远没有想象的那么简单.如果你没有听说过DNS查询.反向解析.zone传输.动态更新.DNS安全,那你可以从本文中得到关于他们的最简明的诠释. 一.