JAVA 基础学习之线程和正则表达式

线程与进程:

 
进程通常意义上讲为我们运行的一个应用程序 进程由线程组成,一个进程至少包含一个线程
 
进程脱离了线程就没有意义了

创建线程

 

1通过继承Thread类来实现

public class GameThread extends Thread {
	@Override
	public void run() {//包装独立的功能
		for (int i = 0; i < 100; i++) {
			System.out.println(i+" 游戏.....");
		}
	}



public class MusicThread extends Thread{
	@Override
	public void run() {
		for (int i = 0; i < 100; i++) {
			System.out.println(i+"  音乐.....");
		}
	}
}




public class Test {
	public static void main(String[] args) {
		GameThread gt = new GameThread();
		MusicThread mt = new MusicThread();
		gt.start();
		mt.start();
	}
}
  1. 先明确我们需要把什么事情封装成一个线程对象(现有相应的代码)
  2. 自定义一个类 extends  Thread
  3. 覆写run方法,在这里写1步中的代码
  4. 创建一个自定义类的对象 t
  5. 启动线程  t.start();
  6. 注意执行过程:本质是代码执行到一个位置之后,如果切换到另一个线程,在切换回来,那么会从刚才切换走的代码位置继续执行:产生线程安全问题的原因,就在此...

2通过实现R

public class Game implements Runnable{
	
	public void run() {
		
		System.out.println(游戏);
	}
}



public class play implements Runnable{
	
	public void run() {
		
		System.out.println(游戏);
	}
}


public class Test {
	public static void main(String[] args) {
		
        Play play = new Play();
        Thread thread = new Thread(play);
        thread.start();
	}
}
  1. 通过查看API得知,Thread当中的run方法不是来自于自身,而是通过实现Runable接口里面的run方法,从而实现某个类的实例,可以通过线程的方式实现功能,类必须定义一个名为run的无参数方法
  2. 本质Thread也是通过实现接口来实现线程功能的
  3. 如果自定义一个类,完全可以通过实现该接口从而,通过线程实现功能

ThreadAPI

 

构造方法:
* (1)Thread(Runnable target)
* (2)Thread(String name) 线程名称,即使没有设置线程名称,也有默认的线程名称
* public MyThread extend Thread{
* //设置线程名称
* public MyThread(String name){
* super(name);
* }
* }
*
* 方法:
* (1)public static Thread currentThread(); 获取当前线程对象,这个方法在哪个线程
中执行的,返回这个线程对象
* (2)public final String getName();返回当前线程对象的名称
* (3)public void interrupt(); 中断线程
* (4)static boolean interrupted(); 测试当前线程是否已经中断。
* (5)boolean isDaemon() 测试该线程是否为守护线程。* (6)boolean isInterrupted() 测试线程是否已经中断。
* (7)public final void join() 等待该线程终止。
* (8)void setDaemon(boolean on) 将该线程标记为守护线程或用户线程。
* (9)static void sleep(long millis) ; 让当前正在执行的线程休眠指定毫秒数
*
* (10)static void yield(); 暂停当前线程,执行其他线程
* 主动让出cpu的使用权,重新和其他线程平等竞争CPU资源

 

 

 

正则表达式

  1. 简单说就是一组规则类似日期格式化设置模式  yyyy-MM-dd
  2. 不是Java特有的一个东西,不同的开发语言有不同程度的支持

应用场景

应用场景:
手机号码
用户名
密码
邮箱
身份证

(1)String

matches()

 

 

 

//验证当前字符串对象是否匹配传入的正则表达式字符串
boolean matches(String regex);
System.out.println("aaaaaaaaaab".matches("a*b"));//true

replaceAll()

//根据正则表达式,使用新的字符序列替换原本字符串中匹配的内容,生成一个新的字符串对象返回
String replaceAll(String regex,String newStr);
System.out.println("aaaaa1bbb2bbcc3ccc".replaceAll("\\d","e"));
System.out.println("18888888888".replaceAll("(\\d{3})(\\d{4})
(\\d{4})","$1****$3"));//188****8888
 
 
 

split()

 
//使用指定正则表达式规则,分割字符串
String[] split(String regex);
System.out.println(Arrays.toString("1a2b3c4e5".split("[a-zA-Z]")))

(2)Pattern

 
//匹配str这个字符串是否满足regex这个正则表达式规范
static boolean matches(String regex,String str);
System.out.println(Pattern.matches("a*b","aaaaaaaab"))
 

(3)Matcher

 
boolean matches();
Pattern pattern = Pattern.compile("a*b");
Matcher matcher = pattern.macher("aaaaab");
System.out.println(matcher.matches());

 

 
3 、常见的正则符号
 
[abc]               abc 中的任意一个出现 1
[^abc]              除了 abc 之外的任意一个字符出现 1
[0-9]               0-9 10 个数字任意一个出现 1
[a-zA-Z]          所有的字母任意一个出现 1
[a-zA-Z0-9]     所有的字母和数组任意一个出现 1
\d                    [0-9]
\D                   非数字的字符出现 1
\s                    空白字符出现 1
\S                    非空白字符
\w                    [a-zA-Z0-9]
\W                   \w
开始于结束
^                      开始
$                      结束
次数
?                     0 次或者 1
*                      0 次到多次
+                     1 次到多次
{n}                   n
{n,}                   至少 n
{n,m}                 至少 n 次,最多 m
|                        或者
()                       分组
 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值