线程生命周期

线程的生命周期:新建状态、准备状态、运行状态、等待/阻塞状态、死亡状态

示意图:

定义、创建及运行线程

线程:

 package threadrun;

 //定义一个实现Runnable接口的类
class Myrunable1 implements Runnable
{
public void run()
{
for(int i=0;i<=50;i++)
{
System.out.println("线程1");
}
}
}
//定义一个实现Runnable接口的类
class Myrunable2 implements Runnable
{
public void run()
{
for(int i=0;i<=50;i++)
{
System.out.println("线程2");
}
}
} public class thread1 {
public static void main(String arges[])
{
Myrunable1 m1=new Myrunable1();
Myrunable2 m2=new Myrunable2();
Thread t1=new Thread(m1);
Thread t2=new Thread(m2);
t1.start();
t2.start();
}
}

运行结果:

加一个让线程睡眠的方法

 package threadrun;

 //定义一个实现Runnable接口的类
class Myrunable1 implements Runnable
{
public void run()
{
for(int i=0;i<=4;i++)
{
try {
Thread.sleep(50);//使用sleep方法使线程进入睡眠状态50毫秒
} catch (InterruptedException e) { e.printStackTrace();
}
System.out.println("线程1");
}
}
}
//定义一个实现Runnable接口的类
class Myrunable2 implements Runnable
{
public void run()
{
for(int i=0;i<=4;i++)
{
try {
Thread.sleep(50);//使用sleep方法使线程进入睡眠状态50毫秒
} catch (InterruptedException e) { e.printStackTrace();
}
System.out.println("线程2");
}
}
} public class thread1 {
public static void main(String arges[])
{
Myrunable1 m1=new Myrunable1();
Myrunable2 m2=new Myrunable2();
Thread t1=new Thread(m1);
Thread t2=new Thread(m2);
t1.start();
t2.start();
}
}

运行结果:

设置线程优先级

 package threadrun;

 //定义一个实现Runnable接口的类
class Myrunable1 implements Runnable
{
public void run()
{
for(int i=0;i<=4;i++)
{
System.out.println("线程1");
}
}
}
//定义一个实现Runnable接口的类
class Myrunable2 implements Runnable
{
public void run()
{
for(int i=0;i<=4;i++)
{
System.out.println("线程2");
}
}
} public class thread1 {
public static void main(String arges[])
{
Myrunable1 m1=new Myrunable1();
Myrunable2 m2=new Myrunable2();
Thread t1=new Thread(m1);
Thread t2=new Thread(m2);
//设置线程优先级
t1.setPriority(Thread.MAX_PRIORITY);//最高优先级
t2.setPriority(Thread.MAX_PRIORITY);//最低优先级
t1.start();
t2.start();
}
}

线程优先级

运行结果:

package threadrun;

//定义一个实现Runnable接口的类
class Myrunable1 implements Runnable
{
public void run()
{
for(int i=0;i<=4;i++)
{
try {
Thread.sleep(50);//使用sleep方法使线程进入睡眠状态50毫秒
} catch (InterruptedException e) { e.printStackTrace();
}
System.out.println("线程1");
}
}
}
//定义一个实现Runnable接口的类
class Myrunable2 implements Runnable
{
public void run()
{
for(int i=0;i<=4;i++)
{
try {
Thread.sleep(50);//使用sleep方法使线程进入睡眠状态50毫秒
} catch (InterruptedException e) { e.printStackTrace();
}
System.out.println("线程2");
}
}
} public class thread1 {
public static void main(String arges[])
{
Myrunable1 m1=new Myrunable1();
Myrunable2 m2=new Myrunable2();
Thread t1=new Thread(m1);
Thread t2=new Thread(m2);
//设置线程优先级
t1.setPriority(Thread.MAX_PRIORITY);//最高优先级
t2.setPriority(Thread.MAX_PRIORITY);//最低优先级
t1.start();
t2.start();
}
}

带睡眠方法的线程优先级

运行结果:

学习java随笔第十篇:java线程的更多相关文章

  1. 【JAVA并发第四篇】线程安全

    1.线程安全 多个线程对同一个共享变量进行读写操作时可能产生不可预见的结果,这就是线程安全问题. 线程安全的核心点就是共享变量,只有在共享变量的情况下才会有线程安全问题.这里说的共享变量,是指多个线程 ...

  2. Java进阶(三十九)Java集合类的排序,查找,替换操作

    Java进阶(三十九)Java集合类的排序,查找,替换操作 前言 在Java方向校招过程中,经常会遇到将输入转换为数组的情况,而我们通常使用ArrayList来表示动态数组.获取到ArrayList对 ...

  3. Java进阶(三十五)java int与integer的区别

    Java进阶(三十五)java int与Integer的区别 前言 int与Integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而Integer是对象 ...

  4. Java进阶(二十五)Java连接mysql数据库(底层实现)

    Java进阶(二十五)Java连接mysql数据库(底层实现) 前言 很长时间没有系统的使用java做项目了.现在需要使用java完成一个实验,其中涉及到java连接数据库.让自己来写,记忆中已无从搜 ...

  5. 【JAVA并发第三篇】线程间通信

    线程间的通信 JVM在运行时会将自己管理的内存区域,划分为不同的数据区,称为运行时数据区.每个线程都有自己私有的内存空间,如下图示: Java线程按照自己虚拟机栈中的方法代码一步一步的执行下去,在这一 ...

  6. Java多线程系列 基础篇02 线程的创建和运行

    1.线程创建的方式常用有两种 1. 继承 Thread 类创建线程 2. 实现 Runnable 接口创建线程 2.Thread 和 Runnable的区别 Thread和Runnable的相同点:都 ...

  7. Java多线程系列 基础篇01 线程的状态

    1.进程和线程 进程: 计算机中程序关于某数据集合的一次运行活动,是计算机系统进行资源分配和调度的基本单位,是操作系统结构的基础. 线程: 线程是进程的实例,是CPU进行资源分配和调度的最小单位,线程 ...

  8. 菜鸡的Java笔记 第二十八 - java 包的定义

    包的主要作用以及定义    包的导入操作    系统常见的开发包    jar 程序命令        包的定义        在任何的操作系统之中都有一个统一的共识:同一个目录下不能够存在有相同的文 ...

  9. 学习java随笔第十一篇:java窗体程序

    要开java的窗体程序,就要下载开发窗体的工具. 这里我用的是的myeclipse,可以直接在网上下载安装即可. 我用的是10.0版本的,如果需要汉化的话,可以看一下这篇文章:myeclipse.10 ...

随机推荐

  1. CentOS6.5 x86_64 配置Broadcom 43XX系列 无线网卡驱动

    from: http://wiki.centos.org/HowTos/Laptops/Wireless/Broadcom?action=show In order to install Broadc ...

  2. 2821: 作诗(Poetize)

    2821: 作诗(Poetize) Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 1078  Solved: 348[Submit][Status] ...

  3. VM Depot 登陆中国!

     发布于 2014-03-24 作者 陈 忠岳 今天我很高兴地向大家宣布,来自微软开放技术(上海)有限公司的首个产品 VM Depot 正式在中国发布!VM Depot是为Windows Azur ...

  4. SVN服务器及客户端的使用

    Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上了,下载地址:http://s ...

  5. HDU 2546 饭卡

    http://acm.hdu.edu.cn/showproblem.php?pid=2546 呆呆. 饭卡 Time Limit: 5000/1000 MS (Java/Others)    Memo ...

  6. HDU-2700 Parity

    http://acm.hdu.edu.cn/showproblem.php?pid=2700 题目意思很重要:  //e:是要使字符串中1的个数变成偶数.o:是要使字符串中1的个数变成奇数 Parit ...

  7. Shell编程之函数调用

    Shell中的函数调用的使用方法见我下面的代码示例: #!/bin/bash # value init ExP="adb shell /data/local/tmp/vpxdec --yv1 ...

  8. [zz] makefile中=和:=的区别

    转载自:http://www.cnblogs.com/wanqieddy/archive/2011/09/21/2184257.html 在Makefile中我们经常看到 = := ?= +=这几个赋 ...

  9. 使用GitHub管理源代码

    作为一个开发员,源码的管理是一个头等大事来的,想象一下,修改完成却发现文件丢失了,该怎么办?有了源代码管理工具,能够帮助我们查看某个代码文件的修改内存及历史修改记录. 作为.Net开发员,我使用过VS ...

  10. OGG 单表初始化操作步骤

    有时候ogg两端数据不一致,且数据量较大,手工修改比较复杂的情况下,我们需要对这些表进行初始化.初始化的大概思路是: 1. 停止两端OGG 2. 如果业务不可以停很长时间,就需要配置目标端进程,暂停这 ...