您的位置:首页 > 编程语言 > Java开发

java线程创建和方法,及解决安全问题学习笔记

2020-07-16 05:35 17 查看

线程的创建:
1.继承Thread创建。
2.实现Runnable接口创建

第一种方法:

class Window extends Thread{
//重写run方法实现逻辑
@Override
public void run(){

}
}
class Test{
public static void main(String[] args){
Window w1=new Window;
w1.start();
}
}

第二种方法:

class Window implements Runnable{
//重写run方法实现逻辑
@Override
public void run(){
}

}
class Test{
public static void main(String[] args){
Window window=new Window;
new Thread(window).start();
}
}

线程中的方法:
start():启动该线程;调用该线程的run()方法;
run():重写run()方法,写逻辑代码
yield():释放当前线程的执行权
join():在a线程中调用b线程的join()方法,会执行b线程,a线程进入阻塞状态,知道b线程执行完之后,a线程才会开始执行。
sleep(longe time):让当前线程“睡眠”指定的time毫秒,在指定的time毫秒时间内,当前线程为阻塞状态
isAlive():判断当前线程是否存活
stop():已过时不推荐使用
getPriority():得到线程优先级 **************高优先级线程只是高概率的情况下被执行
setPriority():设置线程优先级
(目前总结了这些,可能还有很多没总结到)

线程安全问题的解决:
1.同步代码块:
简单方法:实现Runnable类的创建线程方法可用this来做监视器,继承Thread创建线程可用当前类做监视器。
其他方法:任何一个对象来充当监视器
synchronized(监视器){
同步代码块(对共享数据操作的代码)
}
继承Thread创建的线程解决线程安全问题:

package com.nsu.edu.cn.thread;

class Window extends Thread{

private static int ticket=100;

@Override
public void run() {

while (true){
synchronized(Window.class) {
if (ticket > 0) {
System.out.println(getName() + ":" + ticket);
ticket--;
}

if (ticket <= 0) {
break;
}
}
}

}
}

public class WindowTest1 {

public static void main(String[] args) {
Window w1=new Window();
Window w2=new Window();
Window w3=new Window();
w1.start();
w2.start();
w3.start();
System.out.println();

}

}

实现Runnable接口创建的线程解决线程安全问题:

package com.nsu.edu.cn.thread;

class Window1 implements Runnable{
private int ticket=100;

@Override
public void run() {
while (true){
synchronized(this) {
if (ticket > 0) {
System.out.println(Thread.currentThread().getName() + ":" + ticket);
ticket--;
}else {
break;
}
}

}

}
}
public class WindowsTest2 {
public static void main(String[] args) {
Window1 window1=new Window1();
Thread w1=new Thread(window1);
Thread w2=new Thread(window1);
Thread w3=new Thread(window1);
w1.setName("窗口1");
w2.setName("窗口2");
w3.setName("窗口3");
w1.start();
w2.start();
w3.start();
}
}

2.同步方法解决线程安全问题。
Runnable类:

package com.nsu.edu.cn.thread;

class Window1 implements Runnable{
private int ticket=100;

@Override
public void run() {
while (true){
show();
if (ticket==0){
break;
}

}

}
public synchronized void show(){
if (ticket > 0) {
System.out.println(Thread.currentThread().getName() + ":" + ticket);
ticket--;
}
}
}
public class WindowsTest2 {
public static void main(String[] args) {
Window1 window1=new Window1();
Thread w1=new Thread(window1);
Thread w2=new Thread(window1);
Thread w3=new Thread(window1);
w1.setName("窗口1");
w2.setName("窗口2");
w3.setName("窗口3");
w1.start();
w2.start();
w3.start();
}
}

继承Thread:

package com.nsu.edu.cn.thread;

class Window extends Thread{

private static int ticket=100;

@Override
public void run() {

while (true){
show();
if (ticket <= 0) {
break;

}
}

}
public static synchronized void show(){
if (ticket > 0) {
System.out.println(Thread.currentThread().getName() + ":" + ticket);
ticket--;
}
}
}

public class WindowTest1 {

public static void main(String[] args) {
Window w1=new Window();
Window w2=new Window();
Window w3=new Window();
w1.start();
w2.start();
w3.start();
System.out.println();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: