(1)线程的常用方法 (2)线程的同步机制 (3)网络编程的常识

1.线程的常用方法
static void sleep(long millis)
- 用于使得当前正在执行的线程进入休眠状态,休眠参数指定的毫秒(重点)。
static void sleep(long millis, int nanos)
- 用于休眠参数指定的毫秒+纳秒,1秒=1000毫秒 1毫秒=1000微秒 1微秒=1000纳秒

int getPriority() - 用于获取调用对象的优先级并返回。
void setPriority(int newPriority) - 用于设置调用对象的优先级。
- 优先级越高则表示优先获取CPU时间片的机会越大,但不保证该线程一定先执行。

void join() - 用于等待调用对象所表示的线程终止(重点)。
void join(long millis) - 用于等待调用对象所表示线程终止的最长时间为参数指定毫秒
void join(long millis, int nanos) - 用于等待参数指定毫秒加上纳秒。

boolean isDaemon() - 用于判断调用对象所表示的线程是否为守护线程。
void setDaemon(boolean on) - 用于设置调用对象所表示线程为守护线程。
- 该方法的调用必须在线程调用start()方法之前。
- 当所有非守护线程结束时,则守护线程随之结束。

2.线程的同步机制(重点)
2.1 基本概念
当多个线程同时访问同一种共享资源时,可能会造成数据的不一致或覆盖等问题,此时就需要对线程之间进行协调和通信,该方式就叫做线程的同步机制。

2.2 解决方案
由程序结果可知:当两个线程同时进行取款时,导致最终的账户余额不合理。
原因:线程一还没有来得及将取款后的余额写入数据库,但线程二已经开始执行。
解决方案:将线程的并发操作改为线程的串行操作即可。
引发问题:该方式会造成线程执行的效率降低,因此以后的开发中能不用则不用。

2.3 实现方式
在Java语言中可以借助synchronized关键字实现同步锁/对象锁机制,来保证线程执行的原子性,具体方式如下:
(1)使用同步语句块的机制来实现
synchronized(对象的引用){
编写所有需要锁定的代码块;
}
(2)使用synchronized关键字修饰整个方法,表示锁定整个方法的方法体。
该方式等价于 synchronized(this){ 方法体; }。

2.4 实现原理(尽量理解)
当多个线程启动之后同时去抢占共享资源,若其中一个线程抢到了共享资源,则其他线程进入阻塞/等待状态,直到该线程执行完毕所有锁定的代码后会自动释放对象锁,此时等待的线程又可以抢占共享资源,抢到对象锁的代码执行锁定的代码,抢不到的线程继续等待。

2.5 死锁(了解)
线程一执行的代码:
public void run(){

synchronized(a){ 持有对象锁a,等待对象锁b
synchronized(b){
代码块;
}
}
}
线程二执行的代码:
public void run(){

synchronized(b){ 持有对象锁b,等待对象锁a
synchronized(a){
代码块;
}
}
}

经验:
在以后的开发中切记不要使用同步语句块的嵌套结构!!!

2.6 Object类中的常用方法
void wait()
- 用于让当前线程进入等待状态,直到其他线程调用notify()/notifyAll()方法。
void wait(long timeout)
- 用于让当前线程进入等待状态,直到其他线程调用notify()/notifyAll()方法,
或者参数指定的毫秒已经过去了。
void notify() - 用于唤醒等待状态的一个线程(随机)。
void notifyAll() - 用于唤醒等待状态的所有线程。

原文地址:https://www.cnblogs.com/sumboy/p/9058596.html

时间: 2024-08-15 15:56:38

(1)线程的常用方法 (2)线程的同步机制 (3)网络编程的常识的相关文章

Java之线程,常用方法,线程同步,死锁

1, 线程的概念 进程与线程 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程.(进程是资源分配的最小单位) 线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小.(线程是cpu调度的最小单位) 切换而不是同步 一个程序中的方法有几条执行路径, 就有几个线程 Java中线程的生命周期 Java线程具有五中基本状态 新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t =

java基础——线程的常用方法和线程生命周期

线程的常用方法 package thread; /* 测试Thread类中的常用方法: 1.start() 2.run():重写Thread方法,将线程要执行的操作声明在方法中 3.Thread.currentThread():静态方法,返回执行当前代码的线程 4.getName():获取当前线程的名字 5.setName():设置当前线程的名字 6.yield():当前线程交出cpu执行权 7.join():在线程a中调用线程b的join方法,此时线程a进入阻塞态,直到线程b完全执行完后,a才

线程的同步机制

1 线程安全问题的原因:由于一个线程在操作共享数据过程中,未执行完毕的情况下,另外的线程有参与进来,导致共享数据存在安全问题 2 解决方法:必须让一个线程操作共享数据完毕以后,其它线程才有机会参与共享数据的操作 3 java如何实现线程的安全,现成的同步机制 synchronized(同步监视器){  //需要被同步的代码块(操作共同数据的代码)} 同步监视器:右任何一个类的对象充当,哪个线程获取此监视器,就执行大括号里被同步的代码 1)同步代码块 class Window2 implement

java并发:线程同步机制之ThreadLocal

1.简述ThreadLocal ThreadLocal实例通常作为静态的私有的(private static)字段出现在一个类中,这个类用来关联一个线程.ThreadLocal是一个线程级别的局部变量,下面是线程局部变量(ThreadLocal variables)的关键点: A.当使用ThreadLocal维护变量时,若多个线程访问ThreadLocal实例,ThreadLocal为每个使用该变量的线程提供了一个独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其他线程所对应

C#网络编程系列(两)它Socket同步TCPserver

声明原文 笔者:竹zz  本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 文章系列文件夹 C#网络编程系列文章(一)之Socket实现异步TCPserver C#网络编程系列文章(二)之Socket实现同步TCPserver C#网络编程系列文章(三)之TcpListener实现异步TCPserver C#网络编程系列文章(四)之TcpListener实现同步TCPserver C#网络编程系列文章(五)

线程的几个主要概念----线程间通信;线程死锁;线程控制:挂起、停止和恢复(线程同步的5种方式)

(一)线程同步(5种同步方式) 1.同步方法--->有synchronized关键字修饰的方法.(Java的每个内置对象都有一个内置锁,当用synchronized修饰方法--->内置锁保护整个方法) 在调用该方法前,需要获得内置锁,否则就处于阻塞状态. eg: public  synchronized  void  save(){     } [注: synchronized关键字也可以修饰静态方法,此时如果调用该静态方法,将会锁住整个类.] 2.同步代码块:--->有synchron

java进阶07 线程的让步与阻塞与同步

前面介绍了线程的一些基本知识,现在来说下线程的让步,阻塞,和同步 先说说让步 所谓让步,就是让调用者的线程暂停,让其他线程重新竞争CPU,包括调用者. 先看看代码 package Thread; public class ThreadYield { public static void main(String[] args){ MyThread5 rthread=new MyThread5(); Thread thread1=new Thread(rthread); Thread thread2

基础学习day11--多线程一线程的创建,运行,同步和锁

1.1.进程和线程 进程:一个应用程序一般都是一个进程,正在进行的程序 每一个进程最少都有一个线程,都有一个执行顺序,该顺序是一个执行路径或者一个控制单元 线程:进程中一个独立的控制单元,线程控制着进程的执行. windows中的任务管理器,可以查看进程,linux下通过ps命令 线程是进程的最小单位 线程依赖于进程 线程随着进程的创建和创建,随着进程的结束而消亡 如迅雷:可以同时开启多个下载,就是多线程 多个程序同时执行,时CPU在很快的切换,看上去是同时执行,实际上是在CPU在切换执行. 多

关于单例模式这种比上面1、2都好一些,既实现了线程安全,又避免了同步带来的性能影响。

Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.这些应用都或多或少具有资源管理器的功能.每台计算机可以有若干个打印机,但只能有一个P