java基础——线程的常用方法和线程生命周期

线程的常用方法

package thread;
/*
测试Thread类中的常用方法:
1.start()
2.run():重写Thread方法,将线程要执行的操作声明在方法中
3.Thread.currentThread():静态方法,返回执行当前代码的线程
4.getName():获取当前线程的名字
5.setName():设置当前线程的名字
6.yield():当前线程交出cpu执行权
7.join():在线程a中调用线程b的join方法,此时线程a进入阻塞态,直到线程b完全执行完后,a才结束阻塞状态
8.stop():强制结束当期线程生命期,不推荐使用
9.Thread.sleep(long millitime):静态方法让当前线程睡眠指定毫秒数
10.isAlive():

线程的优先级
1.
    MAX_PRIORITY = 10
    NORM_PRIORITY = 5 默认优先级
    Min_PRIORITY = 1
2.设置当前线程的优先级
    getPriority():获取当前线程优先级
    setPriority(int p):设置~

    说明:高优先级的线程要抢占低优先级现场的cpu执行权,但只是从概率上讲,并不意味着
         只有当高优先级线程执行完以后,低优先级线程才执行

@author zsben
@create 2020-01-03 10:35
*/

class HelloThread extends  Thread{
    @Override
    public void run() {
        for(int i=0;i<100;i++) {
            if (i % 2 == 0) {
                try {
                    sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName() + ": " + i + ", "+this.getPriority());
            }
            if(i%20==0)
                this.yield();//当前执行的线程交出执行权
        }
    }

    public HelloThread(String name){
        super(name);
    }
    public HelloThread(){
        super();
    }
}

public class ThreadMethodTest {
    public static void main(String[] args) {
        Thread.currentThread().setPriority(Thread.MIN_PRIORITY);

        HelloThread helloThread = new HelloThread();
        //HelloThread helloThread1 = new HelloThread("thread2");

        helloThread.setName("thread1");

        helloThread.setPriority(Thread.MAX_PRIORITY);//设置优先级
        helloThread.start();
        //helloThread1.start();

        //给主线程命名
        Thread.currentThread().setName("main");
        for(int i=0;i<100;i++) {
            if (i % 2 == 0) {
                System.out.println(Thread.currentThread().getName() + ": " + i);
            }
            if(i==20) {
                try {
                    helloThread.join();//让helloThread线程先执行
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

        System.out.println(helloThread.isAlive());
    }
}

线程的生命周期

/*
线程生命周期:                                            sleep(time),join()   sleep()时间到,join()结束 |--->--------阻塞------<---|  等待同步锁,wait()        获得同步锁,notify() |                          |  suspend()已被废弃            resume()已被废弃 |       获取cpu执行权       |    新建----------------->就绪<---------------------->运行------------------->死亡            start()             失去cpu执行权或yield()       run()执行完,stop(),                                                            出现Error或异常且没处理
*/

原文地址:https://www.cnblogs.com/zsben991126/p/12148255.html

时间: 2024-10-19 03:26:21

java基础——线程的常用方法和线程生命周期的相关文章

基础总结篇之一:Activity生命周期[转]

from:http://blog.csdn.net/liuhe688/article/details/6733407 基础总结篇之一:Activity生命周期 子曰:溫故而知新,可以為師矣.<論語> 学习技术也一样,对于技术文档或者经典的技术书籍来说,指望看一遍就完全掌握,那基本不大可能,所以我们需要经常回过头再仔细研读几遍,以领悟到作者的思想精髓. 近来回顾了一下关于Activity的生命周期,参看了相关书籍和官方文档,也有了不小的收获,对于以前的认知有了很大程度上的改善,在这里和大家分享一

Java之线程,常用方法,线程同步,死锁

1, 线程的概念 进程与线程 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程.(进程是资源分配的最小单位) 线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小.(线程是cpu调度的最小单位) 切换而不是同步 一个程序中的方法有几条执行路径, 就有几个线程 Java中线程的生命周期 Java线程具有五中基本状态 新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t =

Java基础_学习笔记_16_线程

1.进程与线程 进程,在多任务操作系统中,每个独立执行的程序称为进程,也就是“正在进行的程序”.进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配的最小单元. 线程,是进程中的一部分,是一个程序内部的一条执行线索.在网络或多用户环境下,一个服务器需要接受大量且不确定用户数量的并发请求,为每一个请求创建一个进程显然是行不通的,因此引入了线程.线程是最小的调度单元.通常在一程序中实现多段代码同时交替运行时,需要产生多个线程,并制定每个线程上所要运行的程序代码块,这就

Java基础加强之多线程篇(线程创建与终止、互斥、通信、本地变量)

线程创建与终止 线程创建 Thread类与Runnable接口的关系 public interface Runnable { public abstract void run(); } public class Thread implements Runnable { /* What will be run. */ private Runnable target; ...... /** * Causes this thread to begin execution; the Java Virtu

Java基础教程——多线程:创建线程

多线程 进程 每一个应用程序在运行时,都会产生至少一个进程(process). 进程是操作系统进行"资源分配和调度"的独立单位. Windows系统的"任务管理器"可以查看系统的进程,通过Ctrl+Shift+Esc组合键可以调出"任务管理器". 进程具有三个特征: 独立性:进程拥有自己独立的资源,有私有的地址空间. 动态性:程序是静态的指令集合,而进程是活动的指令集合,进程有其生命周期. 并发性:多个进程可以在同一个处理器上并发执行,互不影响.

java基础九[网络与线程](阅读Head First Java记录)

网络socket连接 Java API的网络功能包(java.net)已经将底层的TCP连接等都封装好了,我们只需要通过Socket对象来建立客户端和服务器的连接,然后客户端能向服务器发送请求,并接收服务端发来的数据即可 服务端和客户端大概的交互如下所示: 编写客户端程序 第一步:建立socket连接 需要客户端和服务器端都建立以下连接 Socket chatSocket=new Socket(“对方IP地址”,TCP端口号); IP类似门牌号,做寻址,找到服务器.端口号是找到这台服务器上的某个

JAVA基础知识之多线程——控制线程

join线程 在某个线程中调用其他线程的join()方法,就会使当前线程进入阻塞状态,直到被join线程执行完为止.join方法类似于wait, 通常会在主线程中调用别的线程的join方法,这样可以保证在所有的子线程执行结束之后在主线程中完成一些统一的步骤.下面是一个例子, package threads; public class JoinThread extends Thread { public JoinThread(String name) { super(name); } public

(1)线程的常用方法 (2)线程的同步机制 (3)网络编程的常识

1.线程的常用方法 static void sleep(long millis) - 用于使得当前正在执行的线程进入休眠状态,休眠参数指定的毫秒(重点). static void sleep(long millis, int nanos) - 用于休眠参数指定的毫秒+纳秒,1秒=1000毫秒 1毫秒=1000微秒 1微秒=1000纳秒 int getPriority() - 用于获取调用对象的优先级并返回. void setPriority(int newPriority) - 用于设置调用对象

java基础——String的常用方法

java中String的常用方法 1.length() 字符串的长度 例:char chars[]={'a','b'.'c'}; String s=new String(chars); i nt len=s.length(); 2.charAt() 截取一个字符 例:char ch; ch="abc".charAt(1); 返回'b' 3. getChars() 截取多个字符 例:String s="this is a demo of the getChars method.