Java笔记第八弹
设置和获取线程名称
//方法
void setName(String name);//将此线程的名称更改为等于参数name
String getName();//返回此线程的名称
public static Thread currentThread();//返回对当前正在执行的线程对象的引用
相关应用:
//无参构造方法
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException, ClassNotFoundException {
DateTest d1=new DateTest();
DateTest d2=new DateTest();
d1.start();
d2.start();
}
}
//DateTest.java
public class DateTest extends Thread{
public void run(){
for(int i=0;i<100;i++){
System.out.println(getName()+":"+i);
}
}
}
//含参构造方法
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException, ClassNotFoundException {
//方法一
DateTest d1=new DateTest();
DateTest d2=new DateTest();
//设置名称
d1.setName("高铁");
d2.setName("飞机");
//方法二
DateTest d1=new DateTest("高铁");
DateTest d2=new DateTest("飞机");
d1.start();
d2.start();
}
}
//DateTest.java
public class DateTest extends Thread{
//方法二
public DateTest(){}
public DateTest(String name){
super(name);
}
public void run(){
for(int i=0;i<100;i++){
System.out.println(getName()+":"+i);
System.out.println(DateTest.currentThread().getName())
}
}
}
线程调度
1、分时调度模型
2、抢占式调度模型(java)
线程优先级
//Thread类中设置和获取线程优先级的方法
public final int getPriority();//返回此线程的优先级
public final void setPriority();//更改此线程的优先级
相关应用:
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException, ClassNotFoundException {
DateTest d1=new DateTest();
DateTest d2=new DateTest();
d1.setName("高铁");
d2.setName("飞机");
d3.setName("汽车");
//返回其优先级
System.out.println(d1.getPriority());//=5
System.out.println(d2.getPriority());//=5
System.out.println(d3.getPriority());//=5
System.out.println(Thread.MAX_PRIORITY);//=10
System.out.println(Thread.MIN_PRIORITY);//=1
System.out.println(Thread.NORM_PRIORITY);//=5
//设置线程的优先级
d1.setPriority(5);
d2.serPriority(10);//仅代表获取CPU的几率高
d3.setPriority(1);
d1.start();
d2.start();
}
}
//DateTest.java
public class DateTest extends Thread{
public void run(){
for(int i=0;i<100;i++){
System.out.println(getName()+":"+i);
}
}
}
线程控制
static void sleep(long millis);//使当前正在执行的线程停留(暂停执行)指定的毫秒数
void join();//等待这个线程死亡
void setDaemon(boolean on);//将此线程标记为守护线程,当运行的线程都是守护线程时,Java虚拟机将退出
相关应用:
//ThreadSleep.java
public void run(){
for(int i=0;i<100;i++){
System.out.println(getName()+":"+i);
try{
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
//ThreadSleepDemo.java
ThreadSleep t1=new ThreadSleep();
ThreadSleep t2=new ThreadSleep();
ThreadSleep t3=new ThreadSleep();
//使得一次接一次得出现
t1.setName("曹操");
t2.setName("刘备");
t3.setName("孙权");
t1.start();
t2.start();
t3.start();
//ThreadJoin.java
public void run(){
for(int i=0;i<100;i++){
System.out.println(getName()+":"+i);
}
}
//ThreadJoinDemo.java
ThreadJoin t1=new ThreadJoin();
ThreadJoin t2=new ThreadJoin();
ThreadJoin t3=new ThreadJoin();
t1.setName("康熙");
t2.setName("四阿哥");
t3.setName("八阿哥");
t1.start();
try{
t1.join();//等待这个线程死亡
}catch(InterruptedException e){
e.printStackTrace();
}
t2.start();
t3.start();
//ThreadDaemon.java
public void run(){
for(int i=0;i<100;i++){
System.out.println(getName()+":"+i);
}
}
//ThreadDaemonDemo.java---守护线程
ThreadDaemon d1=new ThreadDaemon();
ThreadDaemon d2=new ThreadDaemon();
d1.setName("关羽");
d2.setName("张飞");
//设置主线程为刘备
Thread.currentThread().setName("刘备");
//设置守护线程
d1.setDaemon(true);
d2.setDaemon(true);
d1.start();
d2.start();
for(int i=0;i<10;i++){
System.out.println(Thread.currentThread.getName()+":"+i);
}
线程生命周期
// 新建->就绪->运行->死亡
多线程的实现方式
方式2:实现Runnable接口
避免了Java单继承的局限性
适合多个相同代码去处理同一个资源的情况,把线程和程序的代码、数据有效分离,较好地体现了面向对象的设计思想
//MyRunnableDemo.java
MyRunnable my=new MyRunnable();
Thread t1=new Thread(my,"高铁");
Thread t2=new Threda(my,"飞机");
//启动线程
t1.start();
t2.start();
//MyRunnable.java,接口是Runnable
public void run(){
for(int i=0;i<100;i++){
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
线程同步
案例:卖票
//sellTicket.java
public void run(){
while(true){//死循环
if(tickets>0){//实现卖票
System.out.println(Thread.currentThread().getName()+"正在出售第"+tickets+"张票");
tickets--;
}
}
}
//sellTicketDemo.java
sellTicket t1=new sellTicket();
Thread d1=new Thread(t1,"窗口1");
Thread d2=new Thread(t2,"窗口2");
Thread d3=new Thread(t3,"窗口3");
d1.start();
d2.start();
d3.start();
Java笔记第八弹的更多相关文章
- Effective java笔记(八),异常
57.只针对异常的情况才使用异常 try { int i = 0; while(true) range[i++].climb(); }catch(ArrayIndexOutOfBoundsExcept ...
- Java笔记(十八)……包
概述 对类文件进行分类管理. 给类提供多层命名空间. 写在程序文件的第一行. 类名的全称的是 包名.类名. 包也是一种封装形式. 访问权限 引用<The Complete Reference&g ...
- Java笔记(八)
GUI: awt和swing: java.awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能.属于重量级控件. javax.swing:在awt的基 ...
- 菜鸡的Java笔记 第八 - java 面向对象
面向对象的特点以及开发过程. java中最大的特点是其支持面向对象编程设计思想.在面向对象之前广泛流传的是面向过程的编程思想,例如:C语言的开发就属于面向过程 如果要想更简单的去理解面向过 ...
- 包装类、Object类——Java笔记(八)
包装类: 基本数据类型的包装类 基本数据类型 包装类 byte Byte short Short int Integer long Long char Character float ...
- Java笔记(八)TreeMap & TreeSet & LinkedHashMap
TreeMap & TreeSet & LinkedHashMap 一.TreeMap HashMap缺陷:键值对之间没有特定的顺序.在TreeMap中, 键值对之间按键有序,Tree ...
- java并发编程笔记(八)——死锁
java并发编程笔记(八)--死锁 死锁发生的必要条件 互斥条件 进程对分配到的资源进行排他性的使用,即在一段时间内只能由一个进程使用,如果有其他进程在请求,只能等待. 请求和保持条件 进程已经保持了 ...
- Java基础知识笔记(八:集合类)
目录 1 集合类简介 2 List介绍及简单使用 2.1 LinkedList介绍及简单使用 2.2 ArrayList介绍及简单使用 2.3 Vector介绍及简单使用 2.3.1 S ...
- 转 Java笔记:Java内存模型
Java笔记:Java内存模型 2014.04.09 | Comments 1. 基本概念 <深入理解Java内存模型>详细讲解了java的内存模型,这里对其中的一些基本概念做个简单的笔记 ...
- Java 笔记 —— java 和 javac
Java 笔记 -- java 和 javac h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: ...
随机推荐
- openwrt 运行golang 设置时区
转载自:https://www.ohyee.cc/post/note_go_read_openwrt_timezone openwrt 运行golang 时候发现打印时间错误.golang读取时区的过 ...
- holiday07
第七天 grep常用的两种模式查找 参数 含义 ^a 行首,搜寻以a开头的行 ke$ 行尾搜寻以ke结束的行 echo 文字内容 echo会在终端显示指定参数的文字,通常会和重定向 联合使用 重定向& ...
- 异步Udp监听关闭 出现异常,访问已释放的资源或者其他错误的解决方法
在开发异步Udp程序的过程中,通常在关闭UDP的时候回遇到诸如socket 访问已释放的资源之类的异常,如下简单操作下: 1 Udp的监听 2 this.serverSocket = new Sock ...
- ESP8266-01S 烧录AT固件
首先就是下载官网的下载软件和AT固件 这是下载好了的 然后就是硬件电路了 我是想把ESP8266用于Ardiuno板子的,然后网上有说买的USBTOTTL的3v3供电不够,所以我就用的Ardiuno板 ...
- shell_Day02
虽然差了不少天,但的确是第......一天 history 查看历史命令记录 !命令序号 查看命令并执行 -c 清空 关于命令历史的文件 关于命令历史的变量(环境变量) 命令补全 tab:制表符 \t ...
- Linux C语言编程基础
Linux C语言编程基础 选择教材第二章的一节进行编程基础练习 二叉树广度优先遍历(链队) 算法: "head.h" #ifndef _head_h_ #define _head ...
- C语言||一作业03
1.作业头 这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/SE2020-3/ 这个作业目标在哪 https://edu.cnblogs.com/cam ...
- vs2013如何添加扩展库函数
本文仅针对C和C++ vs2013下载C/C++编译器后,能够包含常见的头文件,stdlib.h,stdio.h,math.h这些.如果有其他需求例如:调用GL/glfw32.h,freeglut.h ...
- react+antd upload实现图片宽高、视频宽高尺寸校验
图片宽高校验方法: // 上传图片尺寸限制 const checkIconWH = (file: any) => { return new Promise<void>(functio ...
- c# 串口 转发到 TCP 客户端
前言 对于数据流Stream的转发.在.net 3.5之后的版本只需要 stream.CopyTo(stream). 目前只是为了方便调用测试,花了一点点时间做了一个简单的调用demo 完整代码 us ...