diff --git a/test/hotspot/jtreg/ProblemList-Virtual.txt b/test/hotspot/jtreg/ProblemList-Virtual.txt
index 7615e103d1a..e7627be7b8c 100644
--- a/test/hotspot/jtreg/ProblemList-Virtual.txt
+++ b/test/hotspot/jtreg/ProblemList-Virtual.txt
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
 # This code is free software; you can redistribute it and/or modify it
@@ -27,10 +27,6 @@
 serviceability/AsyncGetCallTrace/MyPackage/ASGCTBaseTest.java 8308026 generic-all
 serviceability/jvmti/GetThreadListStackTraces/OneGetThreadListStackTraces.java 8308027 generic-all
 serviceability/jvmti/Heap/IterateHeapWithEscapeAnalysisEnabled.java 8264699 generic-all
-serviceability/dcmd/thread/PrintConcurrentLocksTest.java 8308033 generic-all
-serviceability/dcmd/thread/PrintTest.java 8308033 generic-all
-serviceability/dcmd/thread/ThreadDumpToFileTest.java 8308033 generic-all
-serviceability/tmtools/jstack/DaemonThreadTest.java 8308033 generic-all
 
 ####
 ## Classes not unloaded as expected (TODO, need to check if FJ keeps a reference)
diff --git a/test/hotspot/jtreg/serviceability/dcmd/thread/PrintTest.java b/test/hotspot/jtreg/serviceability/dcmd/thread/PrintTest.java
index e4af11c3261..29c462a56b3 100644
--- a/test/hotspot/jtreg/serviceability/dcmd/thread/PrintTest.java
+++ b/test/hotspot/jtreg/serviceability/dcmd/thread/PrintTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2024, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -21,6 +21,7 @@
  * questions.
  */
 
+import org.testng.SkipException;
 import org.testng.annotations.Test;
 import org.testng.Assert;
 
@@ -171,6 +172,9 @@ public class PrintTest {
 
     @Test
     public void jmx() {
+        if (Thread.currentThread().isVirtual()) {
+            throw new SkipException("skipping test since current thread is virtual thread");
+        }
         run(new JMXExecutor());
     }
 }
diff --git a/test/hotspot/jtreg/serviceability/tmtools/jstack/DaemonThreadTest.java b/test/hotspot/jtreg/serviceability/tmtools/jstack/DaemonThreadTest.java
index d7915e8901a..23e9474ad4a 100644
--- a/test/hotspot/jtreg/serviceability/tmtools/jstack/DaemonThreadTest.java
+++ b/test/hotspot/jtreg/serviceability/tmtools/jstack/DaemonThreadTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2022, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2024, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -38,6 +38,7 @@ public class DaemonThreadTest {
     static class NormalThread extends Thread {
 
         NormalThread() {
+            setDaemon(false);
         }
 
         @Override
diff --git a/test/jdk/ProblemList-Virtual.txt b/test/jdk/ProblemList-Virtual.txt
index c352e8a95c1..e3b0a922857 100644
--- a/test/jdk/ProblemList-Virtual.txt
+++ b/test/jdk/ProblemList-Virtual.txt
@@ -33,9 +33,6 @@ com/sun/jdi/cds/CDSBreakpointTest.java 8307778 generic-all
 com/sun/jdi/cds/CDSDeleteAllBkptsTest.java 8307778 generic-all
 com/sun/jdi/cds/CDSFieldWatchpoints.java 8307778 generic-all
 
-sun/tools/jcmd/JcmdOutputEncodingTest.java 8308033 generic-all
-sun/tools/jstack/BasicJStackTest.java 8308033 generic-all
-
 javax/management/remote/mandatory/connection/BrokenConnectionTest.java 8308035 windows-x64
 
 javax/management/remote/mandatory/loading/MissingClassTest.java 8145413 windows-x64
diff --git a/test/jdk/sun/tools/jcmd/JcmdOutputEncodingTest.java b/test/jdk/sun/tools/jcmd/JcmdOutputEncodingTest.java
index 14f5a2be167..01797a6a82a 100644
--- a/test/jdk/sun/tools/jcmd/JcmdOutputEncodingTest.java
+++ b/test/jdk/sun/tools/jcmd/JcmdOutputEncodingTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019, 2021, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 2024, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,8 @@
 
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
 
 import jdk.test.lib.Utils;
 import jdk.test.lib.process.OutputAnalyzer;
@@ -31,7 +33,7 @@ import jdk.test.lib.JDKToolLauncher;
 
 /*
  * @test
- * @bug 8222491 8273187
+ * @bug 8222491 8273187 8308033
  * @summary Tests if we handle the encoding of jcmd output correctly.
  * @library /test/lib
  * @run main JcmdOutputEncodingTest
@@ -52,12 +54,43 @@ public class JcmdOutputEncodingTest {
         launcher.addVMArg("-Dfile.encoding=" + cs);
         launcher.addVMArg("-Dsun.stdout.encoding=" + cs);
         launcher.addToolArg(Long.toString(ProcessTools.getProcessId()));
-        launcher.addToolArg("Thread.print");
+        boolean isVirtualThread = Thread.currentThread().isVirtual();
+        Path threadDumpFile = null;
+        if (isVirtualThread) {
+            // "jcmd Thread.print" will not print thread dumps of virtual threads.
+            // So we use "Thread.dump_to_file" command instead and dump the thread
+            // stacktraces in a file
+            threadDumpFile = Files.createTempFile(Path.of("."), "jcmd", ".tdump").toAbsolutePath();
+            launcher.addToolArg("Thread.dump_to_file");
+            launcher.addToolArg("-overwrite");
+            launcher.addToolArg(threadDumpFile.toString());
+        } else {
+            launcher.addToolArg("Thread.print");
+        }
 
         ProcessBuilder processBuilder = new ProcessBuilder();
         processBuilder.command(launcher.getCommand());
         OutputAnalyzer output = ProcessTools.executeProcess(processBuilder, null, cs);
         output.shouldHaveExitValue(0);
-        output.shouldContain(marker);
+        if (isVirtualThread) {
+            // verify the file containing the thread dump has the expected text
+            try (var br = Files.newBufferedReader(threadDumpFile, cs)) {
+                String line = null;
+                boolean found = false;
+                while ((line = br.readLine()) != null) {
+                    if (line.contains(marker)) {
+                        found = true;
+                        break;
+                    }
+                }
+                if (!found) {
+                    output.reportDiagnosticSummary();
+                    throw new RuntimeException("'" + marker + "' missing in thread dump in file "
+                            + threadDumpFile);
+                }
+            }
+        } else {
+            output.shouldContain(marker);
+        }
     }
 }
diff --git a/test/jdk/sun/tools/jstack/BasicJStackTest.java b/test/jdk/sun/tools/jstack/BasicJStackTest.java
index e0a9c96d6ad..ec0a80e8d78 100644
--- a/test/jdk/sun/tools/jstack/BasicJStackTest.java
+++ b/test/jdk/sun/tools/jstack/BasicJStackTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2021, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2024, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,9 +30,11 @@ import jdk.test.lib.process.OutputAnalyzer;
 import jdk.test.lib.process.ProcessTools;
 import jdk.test.lib.JDKToolLauncher;
 
+import jtreg.SkippedException;
+
 /*
  * @test
- * @bug 8273187
+ * @bug 8273187 8308033
  * @summary Unit test for jstack utility
  * @library /test/lib
  * @run main BasicJStackTest
@@ -42,6 +44,13 @@ public class BasicJStackTest {
     private static ProcessBuilder processBuilder = new ProcessBuilder();
 
     public static void main(String[] args) throws Exception {
+        if (Thread.currentThread().isVirtual()) {
+            // This test runs jstack against the current process and then asserts the
+            // presence of current thread in the stacktraces. We skip this test
+            // when the current thread is a virtual thread since "jstack" command doesn't
+            // print the stacktraces of virtual threads.
+            throw new SkippedException("skipping test since current thread is a virtual thread");
+        }
         testJstackNoArgs();
         testJstack_l();
         testJstackUTF8Encoding();