分类目录归档:JAVA

关于java的那些事儿

java多线程 生产消费者模型

下面的代码讲述了一个故事 一个面包生产铺里目前有30个面包,有三个人来买面包,第一个人要买50个,第二个要买20个,第三个要买30个。 第一个人不够,所以等着,让第二个买了。面包铺继续生产面包。有7个人在生产。 package com.javaer.thread;   public class CPMode {   public static void main(String[] args) { Godown godown = new Godown(30); //初始化库存 30个食物 Consumer c1 = new Consumer(50, godown); Consumer c2 = new Consumer(20, godown); Consumer c3 = new … 继续阅读

发表在 JAVA | 标签为 , , , | 2 条评论

java多线程 优先级

要点:优先级仅仅增大概率,但是并非一定会优先 在多线程中,与线程休眠类似,线程的优先级仍然无法保障线程的执行次序。只不过,优先级高的线程获取CPU资源的概率较大,优先级低的并非没机会执行。 线程的优先级用1-10之间的整数表示,数值越大优先级越高,默认的优先级为5。 package com.javaer.thread;   public class PTread implements Runnable {     public static void main(String[] args) { Thread s1 = new Thread(new TSleep(),"S1"); Thread s2 = new Thread(new TSleep(),"S2"); s1.setPriority(10); s2.setPriority(1); s1.start(); s2.start(); }   @Override public … 继续阅读

发表在 JAVA | 标签为 , , , | 留下评论

Java多线程,线程守护

核心说明:理解这句话下面可以不看了。 守护与其他线程同时执行,当正在运行的线程都是守护线程时,Java 虚拟机退出。 守护线程与普通线程写法上基本么啥区别,调用线程对象的方法setDaemon(true),则可以将其设置为守护线程。 守护线程使用的情况较少,但并非无用,举例来说,JVM的垃圾回收、内存管理等线程都是守护线程。还有就是在做数据库应用时候,使用的数据库连接池,连接池本身也包含着很多后台线程,监控连接个数、超时时间、状态等等。 setDaemon方法的详细说明: public final void setDaemon(boolean on)将该线程标记为守护线程或用户线程。当正在运行的线程都是守护线程时,Java 虚拟机退出。 该方法必须在启动线程前调用。 该方法首先调用该线程的 checkAccess 方法,且不带任何参数。这可能抛出 SecurityException(在当前线程中)。 参数: on – 如果为 true,则将该线程标记为守护线程。 抛出: IllegalThreadStateException – 如果该线程处于活动状态。 SecurityException – 如果当前线程无法修改该线程。 另请参见: isDaemon(), checkAccess() package com.javaer.thread;   public class DThread {   … 继续阅读

发表在 JAVA | 标签为 , , , | 留下评论

java 多线程join,合并线程

线程的join合并的含义就是将几个并行线程的线程合并为一个单线程执行,应用场景是当一个线程必须等待另一个线程执行完毕才能执行时可以使用join方法。 package com.javaer.thread;   public class Tjoin {   /** * @param args */ public static void main(String[] args) { Thread t = new Thread(new Runner()); t.start(); try { t.join(1000); System.out.println("join ok"); } catch (InterruptedException e) { // TODO Auto-generated … 继续阅读

发表在 JAVA | 标签为 , , , | 一条评论

java多线程,让步yield

先看个yield让步的例子 package com.javaer.thread;   public class YThread implements Runnable { private Object obj = new Object();   /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub YThread s = new YThread(); Thread t1 … 继续阅读

发表在 JAVA | 标签为 , , , | 2 条评论

java多线程休眠

线程休眠的方法是Thread.sleep(long millis) 和Thread.sleep(long millis, int nanos) sleep()单位是毫秒 问题1.休眠的时候,哪个线程会休眠 答案:哪个线程调用了sleep,哪个就会休眠 问题2.主线程能休眠了 可以 Thread.sleep()经常被调用来进行程序的等待,比如你想让你的程序定时执行,可以写个代码 int a=2 while(a > 1){ run… Thread.sleep(24*3600*1000);// 每天跑一次 } 看个例子 package com.javaer.thread;   public class TSleep implements Runnable {   public static void main(String[] args) { Thread s1 … 继续阅读

发表在 JAVA | 标签为 , , , , , , | 留下评论

java多线程,同步与锁

线程的同步和锁的问题,我们先来看个例子, 下面的例子我们希望两个线程对m变量进行削减 package com.javaer.thread; /** * 测试线程同步锁的问题 * @author yuexiaosheng * */ public class SysTest implements Runnable { int m = 10;   public static void main(String[] args) { SysTest s1= new SysTest(); Thread t1 = new Thread(s1, "Thread-t1"); Thread … 继续阅读

发表在 JAVA | 标签为 , , , | 一条评论

java采用Runnable 实现多线线程

使用实现Runnalbe可以做出一个多线程,之前我们采用继承Thread的办法也做出一个。 public class TestMitiThread1 implements Runnable {   public static void main(String[] args) { System.out.println(Thread.currentThread().getName() + " 线程运行开始!"); TestMitiThread1 test = new TestMitiThread1(); Thread thread1 = new Thread(test); Thread thread2 = new Thread(test); thread1.start(); thread2.start(); System.out.println(Thread.currentThread().getName() + " 线程运行结束!"); } … 继续阅读

发表在 JAVA | 标签为 , , , | 一条评论

华为上机练习面试题二

题目: 有n 个人围城一圈每次从1数起数到3就把那个人提出圈子,最后只保留一个人。 输入: 输入人数字符串 输出:把最后一个人所保留位置返回出来。 比如你输入11 的话即有11个人 [1,2,3,4,5,6,7,8,9,10,11] 。返回的是7. 如果输入”123a” 的话,返回的是”0″。 package com.javaer.huawei;   import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern;     public class TestJosephRing {   public static void main(String args[]){ String n = "11"; TestJosephRing … 继续阅读

发表在 JAVA | 标签为 , | 一条评论

华为上机面试题

华为java上机题目 题目: 手动输入一个字符串,仅限小写字母,统计并输出每个字符在字符串中出现的次数,并输出。提示可以用map 例子:输入:aaabbbccc 输出:a 3 b 3 c 3 分析: 看到后面的提示,简直就是不用动脑,直接简单粗暴的顺势而上 直接上代码: package com.javaer.huawei;   import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.TreeMap;   public class TestCharAcount {   public static void main(String args[]) { String strIn = "aaabbbccc"; … 继续阅读

发表在 JAVA | 标签为 , | 一条评论