线程 是程序中的执行线程。Java 虚拟机允许应用程序并发地运行多个执行线程。
每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个新 Thread
对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当且仅当创建线程是守护线程时,新线程才是守护程序。
如何实现多线程程序呢?
要实现多线程程序,需要开启进程,开启进程,是需要创建系统资源,但是Java语言不能创建系统资源
只有C/C++可以创建系统资源, 利用c语言创建好的系统资源实现
Java提供了一个类:Thread类
实现多线程程序的步骤:
1)将类声明为 Thread 的子类
2)该子类应重写 Thread 类的 run 方法
3)在主线程进行该自定义的线程类的对象的创建
构造方法摘要 | |
---|---|
Thread() 分配新的 Thread 对象。 | |
Thread(Runnable target) 分配新的 Thread 对象。 | |
Thread(Runnable target, String name) 分配新的 Thread 对象。 | |
Thread(String name) 分配新的 Thread 对象。 | |
Thread(ThreadGroup group, Runnable target) 分配新的 Thread 对象。 |
Thread 类提供了一些方法
1)public final void setName(String name):给线程起名称:无参构造的形式+setName()
例句:MyThread my1 = new MyThread() ;
my1.setName("高圆圆"); //给线程起名字
2)public final String getName() :获取线程名称
3)public Thread(String name):有参构造的形式
例句:MyThread t1 = new MyThread("张三") ;
4)public static Thread currentThread():返回当前正在执行的线程对象的引用
例句:System.out.println(Thread.currentThread().getName());
在获取线程名称的时候:Thread-0/1/2.....
private static int threadInitNumber; //当前线程编号
public final void setDaemon(boolean on) :true时,表示为守护线程
将该线程标记为守护线程或用户线程。当正在运行的线程都是守护线程时,Java 虚拟机退出。(守护线程不会立即结束掉,它会执行一段时间在结束掉) 该方法必须在启动线程前调用。
例句:public static void main(String[] args) {
//创建两个子线程
ThreadDaemon td1 = new ThreadDaemon() ;
ThreadDaemon td2 = new ThreadDaemon() ;
td1.setName("张飞");
td2.setName("关羽");
//在启动之前,设置为守护线程
td1.setDaemon(true);
td2.setDaemon(true);
td1.start();
td2.start();
Thread.currentThread().setName("刘备");
for(int x =0 ; x < 5 ; x ++) {
System.out.println(Thread.currentThread().getName()+":"+x);}}
跟线程优先级相关的方法:
public final int getPriority()返回线程的优先级。
public final void setPriority(int newPriority)更改线程的优先级
线程存在一个默认优先级
public static final int MAX_PRIORITY 10 最大优先级
public static final int MIN_PRIORITY 1 最小优先级
public static final int NORM_PRIORITY 5 默认优先级
假如分别创建三个子线程,让第一个子线程t1执行之后,调用join()等待该线程中,才会再执行t2,t3线程
public static void sleep(long millis):线程睡眠 指定是时间毫秒值
throws InterruptedException
两个区别?
public final void stop() ;强迫线程停止执行。 不会执行了 (过时了),方法能使用的public void interrupt()中断线程。 表示中断线程的一种状态
两个区别?
wait(): wait()调用的,立即释放锁 (同步锁/Lock锁)
sleep(): 线程睡眠,调用不会释放锁
public final void stop() ;强迫线程停止执行。 不会执行了 (过时了),方法能使用的
public static void yield()暂停当前正在执行的线程对象,并执行其他线程
并行和并发(高并发:MyBatis --->IBatis:半自动化)
1) 强者逻辑上的同时,指的是同一个时间段内2)后者物理上的同时,指的是同一个时间点
实现多线程程序的第二种方式:
1)自定义一个类,实现Runnable接口
2)实现接口中的run方法,对耗时的代码进行操作
3)然后在主线程中创建该了对象,将该类对象做为一个资源类,创建Threadd类的对象,将刚才的资源类作为参数进行传递
最后
以上就是务实故事最近收集整理的关于Thread类以及线程的优先级与多线程的全部内容,更多相关Thread类以及线程内容请搜索靠谱客的其他文章。
发表评论 取消回复