java Thread 线程基础(一)

最近又来复习一下java 的 Thread线程,然后把我 学习的稍微记录一下。


首先是 有两种方式可以创建线程:

1.一种是继承Thread类,直接成为Thread的子类

代码见下:

package com.unis.thread1;

public class DemoThread02 extends Thread{

	public void run(){
		System.out.println("DemoThread02 extends Thread");
	}
	
}

main方法里是这样new Thread的

//demoThread02是继承成Thread 类 实现的线程
		DemoThread02 demoThread02 = new DemoThread02();
使用内部类的方式new 一个Thread
//以内部类的方式创建线程
		Thread thread06 = new Thread(){
			public void run(){
				System.out.println("Thread thread06 = new Thread(){---内部类");
			}
		};
		thread06.start();

2.第二种是实现Runnable 接口,然后将该对象传入Thread参数中

代码如下:

package com.unis.thread1;

public class DemoRunnable04 implements Runnable{

	@Override
	public void run() {
		System.out.println("DemoRunnable04 implements Runnable");
	}

}
//demoRunnable04 是实现了 Runnable 接口
		DemoRunnable04 demoRunnable04 = new DemoRunnable04();
		Thread demoThread04 = new Thread(demoRunnable04);
		demoThread04.start();

    使用内部类的方式创建线程

//demoThread05 也为 传去 Runnable对象
		Thread demoThread05 = new Thread(new Runnable() {
			
			@Override
			public void run() {
				System.out.println("demoThread05---new Thread(new Runnable()");
				
			}
		});
		demoThread05.start();

接下来 我们来看看线程的一个机制:

如果在main方法中依次start线程,但是打印完的顺序不一定会按照start的顺序会打印。

我在main方法中首先打印出main方法的线程名:

public static void main(String[] args) {
		String currentName = Thread.currentThread().getName();
		System.out.println("currentName:"+currentName);
		
		
	}

结果为:

currentName:main

接下来我又在main方法中新建十个线程,一次打印线程的名称,最后打印的顺序不是按照代码的顺序执行,代码如下:

public static void main(String[] args){
		//输出当前线程的线程名城
		System.out.println("currentThread:"+Thread.currentThread().getName());
		
		//创建是个线程,依次输出这些线程的名称
		for(int i=0;i<10;i++){
			new Thread(""+i){
				public void run(){
					System.out.println("thread"+ getName() + " running");
				}
			}.start();
		}
		
	}

打印结果如下:

currentThread:main
thread0 running
thread1 running
thread2 running
thread4 running
thread3 running
thread6 running
thread7 running
thread5 running
thread9 running

thread8 running


打印出的顺序不是完全按照1234.。。这样的顺序来的

这是为什么呢?

1号线程不一定是第一个将自己的名字输出到控制台的线程,这是因为线程是并行执行而不是顺序执行的。JVM和操作系统一起决定了线程的执行顺序,他和线程的启动顺序并非一定是一致的。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值